Page Not Found
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
diff --git a/404.html b/404.html index c91c41400..7c37c1376 100644 --- a/404.html +++ b/404.html @@ -2,13 +2,13 @@
- +We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
["'])(?.*?)\1/,f=/\{(? [\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},x={...g,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},j=Object.keys(g);function b(e,t){const n=e.map((e=>{const{start:n,end:s}=x[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:o}=t;if(o&&f.test(o)){const e=o.match(f).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return b(["tex"],t);case"lua":case"haskell":case"sql":return b(["lua"],t);case"wasm":return b(["wasm"],t);case"vb":case"vba":case"visual-basic":return b(["vb","rem"],t);case"vbnet":return b(["vbnet","rem"],t);case"batch":return b(["rem"],t);case"basic":return b(["rem","f90"],t);case"fsharp":return b(["js","ml"],t);case"ocaml":case"sml":return b(["ml"],t);case"fortran":return b(["f90"],t);case"cobol":return b(["cobol"],t);default:return b(j,t)}}(s,a),i=n.split("\n"),r=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const N={codeBlockContainer:"codeBlockContainer_refD"};var y=n(6070);function A(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const o=t[s];o&&"string"==typeof a&&(n[o]=a)})),n}(d());return(0,y.jsx)(t,{...n,style:s,className:(0,i.A)(n.className,N.codeBlockContainer,u.G.common.codeBlock)})}const k={codeBlockContent:"codeBlockContent_opIA",codeBlockTitle:"codeBlockTitle_clxF",codeBlock:"codeBlock_c2k3",codeBlockStandalone:"codeBlockStandalone_lq0i",codeBlockLines:"codeBlockLines_NviX",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_k8vB",buttonGroup:"buttonGroup_GmHW"};function B(e){let{children:t,className:n}=e;return(0,y.jsx)(A,{as:"pre",tabIndex:0,className:(0,i.A)(k.codeBlockStandalone,"thin-scrollbar",n),children:(0,y.jsx)("code",{className:k.codeBlockLines,children:t})})}var w=n(7888);const C={attributes:!0,characterData:!0,childList:!0,subtree:!0};function E(e,t){const[n,a]=(0,s.useState)(),o=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n){void 0===n&&(n=C);const a=(0,w._q)(t),o=(0,w.Be)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,o),()=>t.disconnect()}),[e,a,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var L=n(5371);const _={codeLine:"codeLine_rVw9",codeLineNumber:"codeLineNumber_Dp4N",codeLineContent:"codeLineContent_W8mn"};function T(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:o}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=a({line:t,className:(0,i.A)(n,s&&_.codeLine)}),r=t.map(((e,t)=>(0,y.jsx)("span",{...o({token:e})},t)));return(0,y.jsxs)("span",{...c,children:[s?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)("span",{className:_.codeLineNumber}),(0,y.jsx)("span",{className:_.codeLineContent,children:r})]}):r,(0,y.jsx)("br",{})]})}var U=n(8072);function S(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function z(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const I={copyButtonCopied:"copyButtonCopied_KK14",copyButtonIcons:"copyButtonIcons_JSxu",copyButtonIcon:"copyButtonIcon_Qfqj",copyButtonSuccessIcon:"copyButtonSuccessIcon_jdaa"};function M(e){let{code:t,className:n}=e;const[a,o]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),a=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const o=document.getSelection(),c=o.rangeCount>0&&o.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),c&&(o.removeAllRanges(),o.addRange(c)),a&&a.focus()}(t),o(!0),c.current=window.setTimeout((()=>{o(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,y.jsx)("button",{type:"button","aria-label":a?(0,U.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,U.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,U.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.A)("clean-btn",n,I.copyButton,a&&I.copyButtonCopied),onClick:r,children:(0,y.jsxs)("span",{className:I.copyButtonIcons,"aria-hidden":"true",children:[(0,y.jsx)(S,{className:I.copyButtonIcon}),(0,y.jsx)(z,{className:I.copyButtonSuccessIcon})]})})}function R(e){return(0,y.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,y.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const H={wordWrapButtonIcon:"wordWrapButtonIcon_eJM7",wordWrapButtonEnabled:"wordWrapButtonEnabled_w1aU"};function W(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,U.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,y.jsx)("button",{type:"button",onClick:n,className:(0,i.A)("clean-btn",t,s&&H.wordWrapButtonEnabled),"aria-label":a,title:a,children:(0,y.jsx)(R,{className:H.wordWrapButtonIcon,"aria-hidden":"true"})})}function D(e){let{children:t,className:n="",metastring:a,title:o,showLineNumbers:c,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.p)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");a(n)}),[o]);return E(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(a)||o,{lineClassNames:j,code:b}=v(t,{metastring:a,language:h,magicComments:m}),N=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,y.jsxs)(A,{as:"div",className:(0,i.A)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,y.jsx)("div",{className:k.codeBlockTitle,children:x}),(0,y.jsxs)("div",{className:k.codeBlockContent,children:[(0,y.jsx)(L.f4,{theme:f,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:o}=e;return(0,y.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.A)(t,k.codeBlock,"thin-scrollbar"),style:n,children:(0,y.jsx)("code",{className:(0,i.A)(k.codeBlockLines,N&&k.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,y.jsx)(T,{line:e,getLineProps:a,getTokenProps:o,classNames:j[t],showLineNumbers:N},t)))})})}}),(0,y.jsxs)("div",{className:k.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,y.jsx)(W,{className:k.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,y.jsx)(M,{className:k.codeButton,code:b})]})]})]})}function V(e){let{children:t,...n}=e;const a=(0,c.A)(),o=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof o?D:B;return(0,y.jsx)(i,{...n,children:o},String(a))}function $(e){return(0,y.jsx)("code",{...e})}var P=n(88);var q=n(9121),G=n(5186);const F={details:"details_aEZs",isBrowser:"isBrowser_E9QB",collapsibleContent:"collapsibleContent_UQe9"};function O(e){return!!e&&("SUMMARY"===e.tagName||O(e.parentElement))}function Q(e,t){return!!e&&(e===t||Q(e.parentElement,t))}function Z(e){let{summary:t,children:n,...a}=e;(0,q.A)().collectAnchor(a.id);const o=(0,c.A)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,G.u)({initialState:!a.open}),[u,m]=(0,s.useState)(a.open),h=s.isValidElement(t)?t:(0,y.jsx)("summary",{children:t??"Details"});return(0,y.jsxs)("details",{...a,ref:r,open:u,"data-collapsed":l,className:(0,i.A)(F.details,o&&F.isBrowser,a.className),onMouseDown:e=>{O(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;O(t)&&Q(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,y.jsx)(G.N,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,y.jsx)("div",{className:F.collapsibleContent,children:n})})]})}const X={details:"details_EQ8c"},J="alert alert--info";function K(e){let{...t}=e;return(0,y.jsx)(Z,{...t,className:(0,i.A)(J,X.details,t.className)})}function Y(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,y.jsx)(y.Fragment,{children:t.filter((e=>e!==n))});return(0,y.jsx)(K,{...e,summary:n,children:a})}var ee=n(8038);function te(e){return(0,y.jsx)(ee.A,{...e})}const ne={containsTaskList:"containsTaskList_FqlQ"};function se(e){if(void 0!==e)return(0,i.A)(e,e?.includes("contains-task-list")&&ne.containsTaskList)}const ae={img:"img_G5X4"};var oe=n(2683);const ce={Head:o.A,details:Y,Details:Y,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,y.jsx)($,{...e}):(0,y.jsx)(V,{...e})},a:function(e){return(0,y.jsx)(P.A,{...e})},pre:function(e){return(0,y.jsx)(y.Fragment,{children:e.children})},ul:function(e){return(0,y.jsx)("ul",{...e,className:se(e.className)})},li:function(e){return(0,q.A)().collectAnchor(e.id),(0,y.jsx)("li",{...e})},img:function(e){return(0,y.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,i.A)(t,ae.img))});var t},h1:e=>(0,y.jsx)(te,{as:"h1",...e}),h2:e=>(0,y.jsx)(te,{as:"h2",...e}),h3:e=>(0,y.jsx)(te,{as:"h3",...e}),h4:e=>(0,y.jsx)(te,{as:"h4",...e}),h5:e=>(0,y.jsx)(te,{as:"h5",...e}),h6:e=>(0,y.jsx)(te,{as:"h6",...e}),admonition:oe.A,mermaid:()=>null};function ie(e){let{children:t}=e;return(0,y.jsx)(a.x,{components:ce,children:t})}},5336:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(758);var s=n(3526),a=n(88),o=n(6070);function c(e){const{permalink:t,title:n,subLabel:c,isNext:i}=e;return(0,o.jsxs)(a.A,{className:(0,s.A)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,o.jsx)("div",{className:"pagination-nav__label",children:n})]})}},5524:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(758);var s=n(3526),a=n(88);const o={tag:"tag_krRq",tagRegular:"tagRegular_XaVR",tagWithCount:"tagWithCount_oFAz"};var c=n(6070);function i(e){let{permalink:t,label:n,count:i,description:r}=e;return(0,c.jsxs)(a.A,{href:t,title:r,className:(0,s.A)(o.tag,i?o.tagWithCount:o.tagRegular),children:[n,i&&(0,c.jsx)("span",{children:i})]})}},7304:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});n(758);var s=n(3526),a=n(8072),o=n(5524);const c={tags:"tags_cQSw",tag:"tag_sv6A"};var i=n(6070);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(a.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.A)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,i.jsx)("li",{className:c.tag,children:(0,i.jsx)(o.A,{...e})},e.permalink)))})]})}},3886:(e,t,n)=>{"use strict";n.d(t,{i:()=>a});var s=n(4480);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.A)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}},4809:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,o]=t;if(s&&o){s=parseInt(s),o=parseInt(o);const e=s {"use strict";n.d(t,{R:()=>c,x:()=>i});var s=n(758);const a={},o=s.createContext(a);function c(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/357ebdd0.697df34d.js b/assets/js/357ebdd0.697df34d.js deleted file mode 100644 index de4f63a15..000000000 --- a/assets/js/357ebdd0.697df34d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[69],{8496:a=>{a.exports=JSON.parse('{"tag":{"label":"user participation","permalink":"/blog/tags/user-participation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/user-participation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/357ebdd0.ceb90ae4.js b/assets/js/357ebdd0.ceb90ae4.js new file mode 100644 index 000000000..fe3f1507a --- /dev/null +++ b/assets/js/357ebdd0.ceb90ae4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5289],{9792:a=>{a.exports=JSON.parse('{"tag":{"label":"user participation","permalink":"/blog/tags/user-participation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/user-participation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/36994c47.cdf0e56f.js b/assets/js/36994c47.946f3118.js similarity index 66% rename from assets/js/36994c47.cdf0e56f.js rename to assets/js/36994c47.946f3118.js index 963180143..f5b81aaa6 100644 --- a/assets/js/36994c47.cdf0e56f.js +++ b/assets/js/36994c47.946f3118.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9208],{4468:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9858],{5516:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/36bc9c65.8f29c9d6.js b/assets/js/36bc9c65.8f29c9d6.js deleted file mode 100644 index e868393bb..000000000 --- a/assets/js/36bc9c65.8f29c9d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6135],{950:a=>{a.exports=JSON.parse('{"tag":{"label":"Client Update","permalink":"/blog/tags/client-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/client-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/36bc9c65.d921631e.js b/assets/js/36bc9c65.d921631e.js new file mode 100644 index 000000000..d36f3c68a --- /dev/null +++ b/assets/js/36bc9c65.d921631e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[14],{1049:a=>{a.exports=JSON.parse('{"tag":{"label":"Client Update","permalink":"/blog/tags/client-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/client-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3990.46ee42c5.js b/assets/js/3990.46ee42c5.js new file mode 100644 index 000000000..b0c34ee7f --- /dev/null +++ b/assets/js/3990.46ee42c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3990],{7073:(e,t,a)=>{a.d(t,{in:()=>c,OU:()=>A,Ki:()=>_,kJ:()=>f,x:()=>i,e7:()=>u,J_:()=>x,Gx:()=>M});var n=a(758),s=a(7888),r=a(4017),l=a(6070);function i(){const e=(0,r.A)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=n.createContext(null);function c(e){let{children:t,content:a,isBlogPostPage:s=!1}=e;const r=function(e){let{content:t,isBlogPostPage:a}=e;return(0,n.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:s});return(0,l.jsx)(o.Provider,{value:r,children:t})}function u(){const e=(0,n.useContext)(o);if(null===e)throw new s.dV("BlogPostProvider");return e}var m=a(2235),h=a(4480);const d=e=>new Date(e).toISOString();function g(e){const t=e.map(v);return{author:1===t.length?t[0]:t}}function p(e,t,a){return e?{image:j({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function f(e){const{siteConfig:t}=(0,h.A)(),{withBaseUrl:a}=(0,m.hH)(),{metadata:{blogDescription:n,blogTitle:s,permalink:r}}=e,l=`${t.url}${r}`;return{"@context":"https://schema.org","@type":"Blog","@id":l,mainEntityOfPage:l,headline:s,description:n,blogPost:e.items.map((e=>function(e,t,a){const{assets:n,frontMatter:s,metadata:r}=e,{date:l,title:i,description:o,lastUpdatedAt:c}=r,u=n.image??s.image,m=s.keywords??[],h=`${t.url}${r.permalink}`,f=c?d(c):void 0;return{"@type":"BlogPosting","@id":h,mainEntityOfPage:h,url:h,headline:i,name:i,description:o,datePublished:l,...f?{dateModified:f}:{},...g(r.authors),...p(u,a,i),...m?{keywords:m}:{}}}(e.content,t,a)))}}function x(){const e=i(),{assets:t,metadata:a}=u(),{siteConfig:n}=(0,h.A)(),{withBaseUrl:s}=(0,m.hH)(),{date:r,title:l,description:o,frontMatter:c,lastUpdatedAt:f}=a,x=t.image??c.image,v=c.keywords??[],j=f?d(f):void 0,b=`${n.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":b,mainEntityOfPage:b,url:b,headline:l,name:l,description:o,datePublished:r,...j?{dateModified:j}:{},...g(a.authors),...p(x,s,l),...v?{keywords:v}:{},isPartOf:{"@type":"Blog","@id":`${n.url}${e.blogBasePath}`,name:e.blogTitle}}}function v(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function j(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}var b=a(5557),w=a(88),N=a(5182),k=a(1197);function M(e){const{pathname:t}=(0,b.zy)();return(0,n.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,k.ys)(e.permalink,t))}(e,t)))),[e,t])}function _(e){const t=(0,N.$z)(e,(e=>`${new Date(e.date).getFullYear()}`)),a=Object.entries(t);return a.reverse(),a}function A(e){let{items:t,ulClassName:a,liClassName:n,linkClassName:s,linkActiveClassName:r}=e;return(0,l.jsx)("ul",{className:a,children:t.map((e=>(0,l.jsx)("li",{className:n,children:(0,l.jsx)(w.A,{isNavLink:!0,to:e.permalink,className:s,activeClassName:r,children:e.title})},e.permalink)))})}},5582:(e,t,a)=>{a.d(t,{A:()=>j});a(758);var n=a(3526),s=a(88),r=a(6070);const l="githubSvg_wObk";const i="xSvg_r_VL";const o=function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,r.jsx)("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),(0,r.jsx)("path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"}),(0,r.jsx)("path",{d:"M3.6 9h16.8"}),(0,r.jsx)("path",{d:"M3.6 15h16.8"}),(0,r.jsx)("path",{d:"M11.5 3a17 17 0 0 0 0 18"}),(0,r.jsx)("path",{d:"M12.5 3a17 17 0 0 1 0 18"})]})},c={authorSocials:"authorSocials_o1MA",authorSocialLink:"authorSocialLink_MtYE",authorSocialIcon:"authorSocialIcon_XqVE"},u={twitter:{Icon:function(e){return(0,r.jsx)("svg",{viewBox:"0 0 256 209",width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",...e,children:(0,r.jsx)("path",{d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 0 1-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 0 1-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 0 1-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 0 0 256 25.45",fill:"#55acee"})})},label:"Twitter"},github:{Icon:function(e){return(0,r.jsx)("svg",{viewBox:"0 0 256 250",width:"1em",height:"1em",...e,className:(0,n.A)(e.className,l),xmlns:"http://www.w3.org/2000/svg",style:{"--dark":"#000","--light":"#fff"},preserveAspectRatio:"xMidYMid",children:(0,r.jsx)("path",{d:"M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"})})},label:"GitHub"},stackoverflow:{Icon:function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 169.61 200",width:"1em",height:"1em",...e,children:[(0,r.jsx)("path",{d:"M140.44 178.38v-48.65h21.61V200H0v-70.27h21.61v48.65z",fill:"#bcbbbb"}),(0,r.jsx)("path",{d:"M124.24 140.54l4.32-16.22-86.97-17.83-3.78 17.83zM49.7 82.16L130.72 120l7.56-16.22-81.02-37.83zm22.68-40l68.06 57.3 11.35-13.51-68.6-57.3-11.35 13.51zM116.14 0l-14.59 10.81 53.48 71.89 14.58-10.81zM37.81 162.16h86.43v-16.21H37.81z",fill:"#f48024"})]})},label:"Stack Overflow"},linkedin:{Icon:function(e){return(0,r.jsx)("svg",{width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 256",...e,children:(0,r.jsx)("path",{d:"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453",fill:"#0A66C2"})})},label:"LinkedIn"},x:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",fill:"none",viewBox:"0 0 1200 1227",...e,className:(0,n.A)(e.className,i),style:{"--dark":"#000","--light":"#fff"},children:(0,r.jsx)("path",{d:"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"})})},label:"X"}};function m(e){let{platform:t,link:a}=e;const{Icon:l,label:i}=u[m=t]??{Icon:o,label:m};var m;return(0,r.jsx)(s.A,{className:c.authorSocialLink,href:a,title:i,children:(0,r.jsx)(l,{className:(0,n.A)(c.authorSocialLink)})})}function h(e){let{author:t}=e;const a=Object.entries(t.socials??{});return(0,r.jsx)("div",{className:c.authorSocials,children:a.map((e=>{let[t,a]=e;return(0,r.jsx)(m,{platform:t,link:a},t)}))})}var d=a(8038);const g={authorImage:"authorImage_Zc7w","author-as-h1":"author-as-h1_Hbf4","author-as-h2":"author-as-h2_w5ag",authorDetails:"authorDetails_HbMv",authorName:"authorName_ZXAJ",authorTitle:"authorTitle_piwJ",authorBlogPostCount:"authorBlogPostCount_Ez8r"};function p(e){return e.href?(0,r.jsx)(s.A,{...e}):(0,r.jsx)(r.Fragment,{children:e.children})}function f(e){let{title:t}=e;return(0,r.jsx)("small",{className:g.authorTitle,title:t,children:t})}function x(e){let{name:t,as:a}=e;return a?(0,r.jsx)(d.A,{as:a,className:g.authorName,children:t}):(0,r.jsx)("span",{className:g.authorName,children:t})}function v(e){let{count:t}=e;return(0,r.jsx)("span",{className:(0,n.A)(g.authorBlogPostCount),children:t})}function j(e){let{as:t,author:a,className:s,count:l}=e;const{name:i,title:o,url:c,imageURL:u,email:m,page:d}=a,j=d?.permalink||c||m&&`mailto:${m}`||void 0;return(0,r.jsxs)("div",{className:(0,n.A)("avatar margin-bottom--sm",s,g[`author-as-${t}`]),children:[u&&(0,r.jsx)(p,{href:j,className:"avatar__photo-link",children:(0,r.jsx)("img",{className:(0,n.A)("avatar__photo",g.authorImage),src:u,alt:i})}),(i||o)&&(0,r.jsxs)("div",{className:(0,n.A)("avatar__intro",g.authorDetails),children:[(0,r.jsxs)("div",{className:"avatar__name",children:[i&&(0,r.jsx)(p,{href:j,children:(0,r.jsx)(x,{name:i,as:t})}),void 0!==l&&(0,r.jsx)(v,{count:l})]}),!!o&&(0,r.jsx)(f,{title:o}),(0,r.jsx)(h,{author:a})]})]})}},8777:(e,t,a)=>{a.d(t,{A:()=>I});var n=a(758),s=a(3526),r=a(3385),l=a(7569),i=a(8072),o=a(7073),c=a(9618),u=a(8038),m=a(6070);function h(e){let{year:t,yearGroupHeadingClassName:a,children:n}=e;return(0,m.jsxs)("div",{role:"group",children:[(0,m.jsx)(u.A,{as:"h3",className:a,children:t}),n]})}function d(e){let{items:t,yearGroupHeadingClassName:a,ListComponent:n}=e;if((0,c.p)().blog.sidebar.groupByYear){const e=(0,o.Ki)(t);return(0,m.jsx)(m.Fragment,{children:e.map((e=>{let[t,s]=e;return(0,m.jsx)(h,{year:t,yearGroupHeadingClassName:a,children:(0,m.jsx)(n,{items:s})},t)}))})}return(0,m.jsx)(n,{items:t})}const g=(0,n.memo)(d),p="sidebar_TT3g",f="sidebarItemTitle_tDhc",x="sidebarItemList_u3Ih",v="sidebarItem_Z1Fj",j="sidebarItemLink_JEx1",b="sidebarItemLinkActive__p1J",w="yearGroupHeading_PV9s",N=e=>{let{items:t}=e;return(0,m.jsx)(o.OU,{items:t,ulClassName:(0,s.A)(x,"clean-list"),liClassName:v,linkClassName:j,linkActiveClassName:b})};function k(e){let{sidebar:t}=e;const a=(0,o.Gx)(t.items);return(0,m.jsx)("aside",{className:"col col--3",children:(0,m.jsxs)("nav",{className:(0,s.A)(p,"thin-scrollbar"),"aria-label":(0,i.T)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,m.jsx)("div",{className:(0,s.A)(f,"margin-bottom--md"),children:t.title}),(0,m.jsx)(g,{items:a,ListComponent:N,yearGroupHeadingClassName:w})]})})}const M=(0,n.memo)(k);var _=a(5508);const A={yearGroupHeading:"yearGroupHeading_MH58"},C=e=>{let{items:t}=e;return(0,m.jsx)(o.OU,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function y(e){let{sidebar:t}=e;const a=(0,o.Gx)(t.items);return(0,m.jsx)(g,{items:a,ListComponent:C,yearGroupHeadingClassName:A.yearGroupHeading})}function P(e){return(0,m.jsx)(_.GX,{component:y,props:e})}const L=(0,n.memo)(P);function B(e){let{sidebar:t}=e;const a=(0,l.l)();return t?.items.length?"mobile"===a?(0,m.jsx)(L,{sidebar:t}):(0,m.jsx)(M,{sidebar:t}):null}function I(e){const{sidebar:t,toc:a,children:n,...l}=e,i=t&&t.items.length>0;return(0,m.jsx)(r.A,{...l,children:(0,m.jsx)("div",{className:"container margin-vert--lg",children:(0,m.jsxs)("div",{className:"row",children:[(0,m.jsx)(B,{sidebar:t}),(0,m.jsx)("main",{className:(0,s.A)("col",{"col--7":i,"col--9 col--offset-1":!i}),children:n}),a&&(0,m.jsx)("div",{className:"col col--2",children:a})]})})})}},7773:(e,t,a)=>{a.d(t,{W:()=>c});var n=a(758),s=a(4480);const r=["zero","one","two","few","many","other"];function l(e){return r.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,s.A)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,a)=>function(e,t,a){const n=e.split("|");if(1===n.length)return n[0];n.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const s=a.select(t),r=a.pluralForms.indexOf(s);return n[Math.min(r,n.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/3a2db09e.5bb4ae1d.js b/assets/js/3a2db09e.584411b2.js similarity index 99% rename from assets/js/3a2db09e.5bb4ae1d.js rename to assets/js/3a2db09e.584411b2.js index a834c95d2..ac0cc6876 100644 --- a/assets/js/3a2db09e.5bb4ae1d.js +++ b/assets/js/3a2db09e.584411b2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9361],{7588:a=>{a.exports=JSON.parse('{"tags":[{"label":"GameVault","permalink":"/blog/tags/game-vault","count":9},{"label":"Client Update","permalink":"/blog/tags/client-update","count":1},{"label":"Server Update","permalink":"/blog/tags/server-update","count":1},{"label":"metadata framework","permalink":"/blog/tags/metadata-framework","count":1},{"label":"plugin system","permalink":"/blog/tags/plugin-system","count":1},{"label":"parental control","permalink":"/blog/tags/parental-control","count":1},{"label":"age restrictions","permalink":"/blog/tags/age-restrictions","count":1},{"label":"theme","permalink":"/blog/tags/theme","count":1},{"label":"app optimization","permalink":"/blog/tags/app-optimization","count":1},{"label":"analytics","permalink":"/blog/tags/analytics","count":1},{"label":"notes","permalink":"/blog/tags/notes","count":1},{"label":"community management","permalink":"/blog/tags/community-management","count":1},{"label":"game","permalink":"/blog/tags/game","count":1},{"label":"metadata","permalink":"/blog/tags/metadata","count":2},{"label":"database","permalink":"/blog/tags/database","count":1},{"label":"videogame","permalink":"/blog/tags/videogame","count":1},{"label":"RAWG","permalink":"/blog/tags/rawg","count":1},{"label":"IGDB","permalink":"/blog/tags/igdb","count":1},{"label":"twitch.tv","permalink":"/blog/tags/twitch-tv","count":1},{"label":"API","permalink":"/blog/tags/api","count":2},{"label":"partnership","permalink":"/blog/tags/partnership","count":1},{"label":"community","permalink":"/blog/tags/community","count":4},{"label":"solution","permalink":"/blog/tags/solution","count":1},{"label":"Steam","permalink":"/blog/tags/steam","count":1},{"label":"backend","permalink":"/blog/tags/backend","count":1},{"label":"update","permalink":"/blog/tags/update","count":1},{"label":"features","permalink":"/blog/tags/features","count":3},{"label":"easter egg","permalink":"/blog/tags/easter-egg","count":1},{"label":"gaming","permalink":"/blog/tags/gaming","count":4},{"label":"self-hosted","permalink":"/blog/tags/self-hosted","count":2},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"DRM-free","permalink":"/blog/tags/drm-free","count":1},{"label":"video games","permalink":"/blog/tags/video-games","count":1},{"label":"subscription","permalink":"/blog/tags/subscription","count":1},{"label":"community-driven","permalink":"/blog/tags/community-driven","count":1},{"label":"updates","permalink":"/blog/tags/updates","count":1},{"label":"announcement","permalink":"/blog/tags/announcement","count":3},{"label":"early access","permalink":"/blog/tags/early-access","count":2},{"label":"release","permalink":"/blog/tags/release","count":1},{"label":"sustainability","permalink":"/blog/tags/sustainability","count":1},{"label":"partnerships","permalink":"/blog/tags/partnerships","count":1},{"label":"Discord","permalink":"/blog/tags/discord","count":3},{"label":"feedback","permalink":"/blog/tags/feedback","count":4},{"label":"improvement","permalink":"/blog/tags/improvement","count":2},{"label":"development","permalink":"/blog/tags/development","count":3},{"label":"April Fools","permalink":"/blog/tags/april-fools","count":1},{"label":"startup","permalink":"/blog/tags/startup","count":1},{"label":"software","permalink":"/blog/tags/software","count":1},{"label":"subscription model","permalink":"/blog/tags/subscription-model","count":1},{"label":"UI Update","permalink":"/blog/tags/ui-update","count":1},{"label":"Beta Testing","permalink":"/blog/tags/beta-testing","count":1},{"label":"Community Feedback","permalink":"/blog/tags/community-feedback","count":2},{"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview","count":1},{"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store","count":1},{"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers","count":1},{"label":"Game Development","permalink":"/blog/tags/game-development","count":1},{"label":"Software Updates","permalink":"/blog/tags/software-updates","count":1},{"label":"Gaming Community","permalink":"/blog/tags/gaming-community","count":1},{"label":"UI Redesign","permalink":"/blog/tags/ui-redesign","count":1},{"label":"Development Milestones","permalink":"/blog/tags/development-milestones","count":1},{"label":"Tech Progress","permalink":"/blog/tags/tech-progress","count":1},{"label":"Future Features","permalink":"/blog/tags/future-features","count":1},{"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey","count":1},{"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle","count":1},{"label":"November Update","permalink":"/blog/tags/november-update","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"collaboration","permalink":"/blog/tags/collaboration","count":1},{"label":"GitHub","permalink":"/blog/tags/git-hub","count":1},{"label":"voting","permalink":"/blog/tags/voting","count":2},{"label":"Kanban Board","permalink":"/blog/tags/kanban-board","count":1},{"label":"Council Member","permalink":"/blog/tags/council-member","count":1},{"label":"polls","permalink":"/blog/tags/polls","count":1},{"label":"gaming experience","permalink":"/blog/tags/gaming-experience","count":1},{"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone","count":1},{"label":"official installations","permalink":"/blog/tags/official-installations","count":1},{"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth","count":1},{"label":"gratitude","permalink":"/blog/tags/gratitude","count":1},{"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault","count":1},{"label":"upcoming update","permalink":"/blog/tags/upcoming-update","count":1},{"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline","count":1},{"label":"simplifying game installation","permalink":"/blog/tags/simplifying-game-installation","count":1},{"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue","count":1},{"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role","count":1},{"label":"Lemmy community launch","permalink":"/blog/tags/lemmy-community-launch","count":1},{"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts","count":1},{"label":"spreading the word","permalink":"/blog/tags/spreading-the-word","count":2},{"label":"support request","permalink":"/blog/tags/support-request","count":1},{"label":"continued support","permalink":"/blog/tags/continued-support","count":1},{"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements","count":1},{"label":"app name migration","permalink":"/blog/tags/app-name-migration","count":1},{"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication","count":1},{"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users","count":1},{"label":"Discord server promotion","permalink":"/blog/tags/discord-server-promotion","count":1},{"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering","count":1},{"label":"box representation","permalink":"/blog/tags/box-representation","count":1},{"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation","count":1},{"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion","count":1},{"label":"Discord channel","permalink":"/blog/tags/discord-channel","count":2},{"label":"name migration progress","permalink":"/blog/tags/name-migration-progress","count":1},{"label":"backend application migration","permalink":"/blog/tags/backend-application-migration","count":1},{"label":"documentation migration","permalink":"/blog/tags/documentation-migration","count":1},{"label":"domain acquisition","permalink":"/blog/tags/domain-acquisition","count":1},{"label":"Subreddit migration","permalink":"/blog/tags/subreddit-migration","count":1},{"label":"Lemmy community","permalink":"/blog/tags/lemmy-community","count":1},{"label":"Client Application update","permalink":"/blog/tags/client-application-update","count":1},{"label":"testing","permalink":"/blog/tags/testing","count":1},{"label":"new logo","permalink":"/blog/tags/new-logo","count":1},{"label":"speculation","permalink":"/blog/tags/speculation","count":1},{"label":"migration finalization","permalink":"/blog/tags/migration-finalization","count":1},{"label":"poll results","permalink":"/blog/tags/poll-results","count":1},{"label":"renaming app","permalink":"/blog/tags/renaming-app","count":1},{"label":"GameStash","permalink":"/blog/tags/game-stash","count":1},{"label":"GameShelf","permalink":"/blog/tags/game-shelf","count":1},{"label":"Harbor","permalink":"/blog/tags/harbor","count":1},{"label":"GameHub","permalink":"/blog/tags/game-hub","count":1},{"label":"market analysis","permalink":"/blog/tags/market-analysis","count":1},{"label":"new name announcement","permalink":"/blog/tags/new-name-announcement","count":1},{"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain","count":1},{"label":"special thanks","permalink":"/blog/tags/special-thanks","count":1},{"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast","count":1},{"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter","count":1},{"label":"transition process","permalink":"/blog/tags/transition-process","count":1},{"label":"source-available software","permalink":"/blog/tags/source-available-software","count":1},{"label":"open-source","permalink":"/blog/tags/open-source","count":1},{"label":"transparency","permalink":"/blog/tags/transparency","count":1},{"label":"control","permalink":"/blog/tags/control","count":1},{"label":"software development","permalink":"/blog/tags/software-development","count":1},{"label":"code access","permalink":"/blog/tags/code-access","count":1},{"label":"hybrid model","permalink":"/blog/tags/hybrid-model","count":1},{"label":"software licensing","permalink":"/blog/tags/software-licensing","count":1},{"label":"revenue generation","permalink":"/blog/tags/revenue-generation","count":1},{"label":"user engagement","permalink":"/blog/tags/user-engagement","count":1},{"label":"harassment","permalink":"/blog/tags/harassment","count":1},{"label":"blackmail","permalink":"/blog/tags/blackmail","count":1},{"label":"threats","permalink":"/blog/tags/threats","count":1},{"label":"spam","permalink":"/blog/tags/spam","count":1},{"label":"trolls","permalink":"/blog/tags/trolls","count":1},{"label":"negative narratives","permalink":"/blog/tags/negative-narratives","count":1},{"label":"safe environment","permalink":"/blog/tags/safe-environment","count":1},{"label":"racist","permalink":"/blog/tags/racist","count":1},{"label":"developers","permalink":"/blog/tags/developers","count":1},{"label":"public","permalink":"/blog/tags/public","count":1},{"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior","count":1},{"label":"app","permalink":"/blog/tags/app","count":1},{"label":"support","permalink":"/blog/tags/support","count":1},{"label":"financial assistance","permalink":"/blog/tags/financial-assistance","count":1},{"label":"motivation","permalink":"/blog/tags/motivation","count":1},{"label":"GameVault app","permalink":"/blog/tags/game-vault-app","count":1},{"label":"bugs","permalink":"/blog/tags/bugs","count":1},{"label":"feature requests","permalink":"/blog/tags/feature-requests","count":1},{"label":"success","permalink":"/blog/tags/success","count":1},{"label":"engagement","permalink":"/blog/tags/engagement","count":1},{"label":"source-available","permalink":"/blog/tags/source-available","count":2},{"label":"gaming platform","permalink":"/blog/tags/gaming-platform","count":1},{"label":"new name","permalink":"/blog/tags/new-name","count":1},{"label":"family-friendly","permalink":"/blog/tags/family-friendly","count":1},{"label":"poll","permalink":"/blog/tags/poll","count":1},{"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names","count":1},{"label":"inclusivity","permalink":"/blog/tags/inclusivity","count":1},{"label":"user participation","permalink":"/blog/tags/user-participation","count":1},{"label":"decision-making","permalink":"/blog/tags/decision-making","count":1},{"label":"platform values","permalink":"/blog/tags/platform-values","count":1},{"label":"future development","permalink":"/blog/tags/future-development","count":1},{"label":"alternative","permalink":"/blog/tags/alternative","count":1},{"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms","count":1},{"label":"DRM-free games","permalink":"/blog/tags/drm-free-games","count":1},{"label":"file server","permalink":"/blog/tags/file-server","count":1},{"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication","count":1},{"label":"RAWG API","permalink":"/blog/tags/rawg-api","count":1},{"label":"health monitoring","permalink":"/blog/tags/health-monitoring","count":1},{"label":"Discord server","permalink":"/blog/tags/discord-server","count":1},{"label":"Reddit forum","permalink":"/blog/tags/reddit-forum","count":1},{"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum","count":1}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8121],{8070:a=>{a.exports=JSON.parse('{"tags":[{"label":"GameVault","permalink":"/blog/tags/game-vault","count":9},{"label":"Client Update","permalink":"/blog/tags/client-update","count":1},{"label":"Server Update","permalink":"/blog/tags/server-update","count":1},{"label":"metadata framework","permalink":"/blog/tags/metadata-framework","count":1},{"label":"plugin system","permalink":"/blog/tags/plugin-system","count":1},{"label":"parental control","permalink":"/blog/tags/parental-control","count":1},{"label":"age restrictions","permalink":"/blog/tags/age-restrictions","count":1},{"label":"theme","permalink":"/blog/tags/theme","count":1},{"label":"app optimization","permalink":"/blog/tags/app-optimization","count":1},{"label":"analytics","permalink":"/blog/tags/analytics","count":1},{"label":"notes","permalink":"/blog/tags/notes","count":1},{"label":"community management","permalink":"/blog/tags/community-management","count":1},{"label":"game","permalink":"/blog/tags/game","count":1},{"label":"metadata","permalink":"/blog/tags/metadata","count":2},{"label":"database","permalink":"/blog/tags/database","count":1},{"label":"videogame","permalink":"/blog/tags/videogame","count":1},{"label":"RAWG","permalink":"/blog/tags/rawg","count":1},{"label":"IGDB","permalink":"/blog/tags/igdb","count":1},{"label":"twitch.tv","permalink":"/blog/tags/twitch-tv","count":1},{"label":"API","permalink":"/blog/tags/api","count":2},{"label":"partnership","permalink":"/blog/tags/partnership","count":1},{"label":"community","permalink":"/blog/tags/community","count":4},{"label":"solution","permalink":"/blog/tags/solution","count":1},{"label":"Steam","permalink":"/blog/tags/steam","count":1},{"label":"backend","permalink":"/blog/tags/backend","count":1},{"label":"update","permalink":"/blog/tags/update","count":1},{"label":"features","permalink":"/blog/tags/features","count":3},{"label":"easter egg","permalink":"/blog/tags/easter-egg","count":1},{"label":"gaming","permalink":"/blog/tags/gaming","count":4},{"label":"self-hosted","permalink":"/blog/tags/self-hosted","count":2},{"label":"platform","permalink":"/blog/tags/platform","count":2},{"label":"DRM-free","permalink":"/blog/tags/drm-free","count":1},{"label":"video games","permalink":"/blog/tags/video-games","count":1},{"label":"subscription","permalink":"/blog/tags/subscription","count":1},{"label":"community-driven","permalink":"/blog/tags/community-driven","count":1},{"label":"updates","permalink":"/blog/tags/updates","count":1},{"label":"announcement","permalink":"/blog/tags/announcement","count":3},{"label":"early access","permalink":"/blog/tags/early-access","count":2},{"label":"release","permalink":"/blog/tags/release","count":1},{"label":"sustainability","permalink":"/blog/tags/sustainability","count":1},{"label":"partnerships","permalink":"/blog/tags/partnerships","count":1},{"label":"Discord","permalink":"/blog/tags/discord","count":3},{"label":"feedback","permalink":"/blog/tags/feedback","count":4},{"label":"improvement","permalink":"/blog/tags/improvement","count":2},{"label":"development","permalink":"/blog/tags/development","count":3},{"label":"April Fools","permalink":"/blog/tags/april-fools","count":1},{"label":"startup","permalink":"/blog/tags/startup","count":1},{"label":"software","permalink":"/blog/tags/software","count":1},{"label":"subscription model","permalink":"/blog/tags/subscription-model","count":1},{"label":"UI Update","permalink":"/blog/tags/ui-update","count":1},{"label":"Beta Testing","permalink":"/blog/tags/beta-testing","count":1},{"label":"Community Feedback","permalink":"/blog/tags/community-feedback","count":2},{"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview","count":1},{"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store","count":1},{"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers","count":1},{"label":"Game Development","permalink":"/blog/tags/game-development","count":1},{"label":"Software Updates","permalink":"/blog/tags/software-updates","count":1},{"label":"Gaming Community","permalink":"/blog/tags/gaming-community","count":1},{"label":"UI Redesign","permalink":"/blog/tags/ui-redesign","count":1},{"label":"Development Milestones","permalink":"/blog/tags/development-milestones","count":1},{"label":"Tech Progress","permalink":"/blog/tags/tech-progress","count":1},{"label":"Future Features","permalink":"/blog/tags/future-features","count":1},{"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey","count":1},{"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle","count":1},{"label":"November Update","permalink":"/blog/tags/november-update","count":1},{"label":"roadmap","permalink":"/blog/tags/roadmap","count":1},{"label":"collaboration","permalink":"/blog/tags/collaboration","count":1},{"label":"GitHub","permalink":"/blog/tags/git-hub","count":1},{"label":"voting","permalink":"/blog/tags/voting","count":2},{"label":"Kanban Board","permalink":"/blog/tags/kanban-board","count":1},{"label":"Council Member","permalink":"/blog/tags/council-member","count":1},{"label":"polls","permalink":"/blog/tags/polls","count":1},{"label":"gaming experience","permalink":"/blog/tags/gaming-experience","count":1},{"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone","count":1},{"label":"official installations","permalink":"/blog/tags/official-installations","count":1},{"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth","count":1},{"label":"gratitude","permalink":"/blog/tags/gratitude","count":1},{"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault","count":1},{"label":"upcoming update","permalink":"/blog/tags/upcoming-update","count":1},{"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline","count":1},{"label":"simplifying game installation","permalink":"/blog/tags/simplifying-game-installation","count":1},{"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue","count":1},{"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role","count":1},{"label":"Lemmy community launch","permalink":"/blog/tags/lemmy-community-launch","count":1},{"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts","count":1},{"label":"spreading the word","permalink":"/blog/tags/spreading-the-word","count":2},{"label":"support request","permalink":"/blog/tags/support-request","count":1},{"label":"continued support","permalink":"/blog/tags/continued-support","count":1},{"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements","count":1},{"label":"app name migration","permalink":"/blog/tags/app-name-migration","count":1},{"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication","count":1},{"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users","count":1},{"label":"Discord server promotion","permalink":"/blog/tags/discord-server-promotion","count":1},{"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering","count":1},{"label":"box representation","permalink":"/blog/tags/box-representation","count":1},{"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation","count":1},{"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion","count":1},{"label":"Discord channel","permalink":"/blog/tags/discord-channel","count":2},{"label":"name migration progress","permalink":"/blog/tags/name-migration-progress","count":1},{"label":"backend application migration","permalink":"/blog/tags/backend-application-migration","count":1},{"label":"documentation migration","permalink":"/blog/tags/documentation-migration","count":1},{"label":"domain acquisition","permalink":"/blog/tags/domain-acquisition","count":1},{"label":"Subreddit migration","permalink":"/blog/tags/subreddit-migration","count":1},{"label":"Lemmy community","permalink":"/blog/tags/lemmy-community","count":1},{"label":"Client Application update","permalink":"/blog/tags/client-application-update","count":1},{"label":"testing","permalink":"/blog/tags/testing","count":1},{"label":"new logo","permalink":"/blog/tags/new-logo","count":1},{"label":"speculation","permalink":"/blog/tags/speculation","count":1},{"label":"migration finalization","permalink":"/blog/tags/migration-finalization","count":1},{"label":"poll results","permalink":"/blog/tags/poll-results","count":1},{"label":"renaming app","permalink":"/blog/tags/renaming-app","count":1},{"label":"GameStash","permalink":"/blog/tags/game-stash","count":1},{"label":"GameShelf","permalink":"/blog/tags/game-shelf","count":1},{"label":"Harbor","permalink":"/blog/tags/harbor","count":1},{"label":"GameHub","permalink":"/blog/tags/game-hub","count":1},{"label":"market analysis","permalink":"/blog/tags/market-analysis","count":1},{"label":"new name announcement","permalink":"/blog/tags/new-name-announcement","count":1},{"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain","count":1},{"label":"special thanks","permalink":"/blog/tags/special-thanks","count":1},{"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast","count":1},{"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter","count":1},{"label":"transition process","permalink":"/blog/tags/transition-process","count":1},{"label":"source-available software","permalink":"/blog/tags/source-available-software","count":1},{"label":"open-source","permalink":"/blog/tags/open-source","count":1},{"label":"transparency","permalink":"/blog/tags/transparency","count":1},{"label":"control","permalink":"/blog/tags/control","count":1},{"label":"software development","permalink":"/blog/tags/software-development","count":1},{"label":"code access","permalink":"/blog/tags/code-access","count":1},{"label":"hybrid model","permalink":"/blog/tags/hybrid-model","count":1},{"label":"software licensing","permalink":"/blog/tags/software-licensing","count":1},{"label":"revenue generation","permalink":"/blog/tags/revenue-generation","count":1},{"label":"user engagement","permalink":"/blog/tags/user-engagement","count":1},{"label":"harassment","permalink":"/blog/tags/harassment","count":1},{"label":"blackmail","permalink":"/blog/tags/blackmail","count":1},{"label":"threats","permalink":"/blog/tags/threats","count":1},{"label":"spam","permalink":"/blog/tags/spam","count":1},{"label":"trolls","permalink":"/blog/tags/trolls","count":1},{"label":"negative narratives","permalink":"/blog/tags/negative-narratives","count":1},{"label":"safe environment","permalink":"/blog/tags/safe-environment","count":1},{"label":"racist","permalink":"/blog/tags/racist","count":1},{"label":"developers","permalink":"/blog/tags/developers","count":1},{"label":"public","permalink":"/blog/tags/public","count":1},{"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior","count":1},{"label":"app","permalink":"/blog/tags/app","count":1},{"label":"support","permalink":"/blog/tags/support","count":1},{"label":"financial assistance","permalink":"/blog/tags/financial-assistance","count":1},{"label":"motivation","permalink":"/blog/tags/motivation","count":1},{"label":"GameVault app","permalink":"/blog/tags/game-vault-app","count":1},{"label":"bugs","permalink":"/blog/tags/bugs","count":1},{"label":"feature requests","permalink":"/blog/tags/feature-requests","count":1},{"label":"success","permalink":"/blog/tags/success","count":1},{"label":"engagement","permalink":"/blog/tags/engagement","count":1},{"label":"source-available","permalink":"/blog/tags/source-available","count":2},{"label":"gaming platform","permalink":"/blog/tags/gaming-platform","count":1},{"label":"new name","permalink":"/blog/tags/new-name","count":1},{"label":"family-friendly","permalink":"/blog/tags/family-friendly","count":1},{"label":"poll","permalink":"/blog/tags/poll","count":1},{"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names","count":1},{"label":"inclusivity","permalink":"/blog/tags/inclusivity","count":1},{"label":"user participation","permalink":"/blog/tags/user-participation","count":1},{"label":"decision-making","permalink":"/blog/tags/decision-making","count":1},{"label":"platform values","permalink":"/blog/tags/platform-values","count":1},{"label":"future development","permalink":"/blog/tags/future-development","count":1},{"label":"alternative","permalink":"/blog/tags/alternative","count":1},{"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms","count":1},{"label":"DRM-free games","permalink":"/blog/tags/drm-free-games","count":1},{"label":"file server","permalink":"/blog/tags/file-server","count":1},{"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication","count":1},{"label":"RAWG API","permalink":"/blog/tags/rawg-api","count":1},{"label":"health monitoring","permalink":"/blog/tags/health-monitoring","count":1},{"label":"Discord server","permalink":"/blog/tags/discord-server","count":1},{"label":"Reddit forum","permalink":"/blog/tags/reddit-forum","count":1},{"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/3ac72a53.47052c5b.js b/assets/js/3ac72a53.0fb90efc.js similarity index 84% rename from assets/js/3ac72a53.47052c5b.js rename to assets/js/3ac72a53.0fb90efc.js index 4df4bfb54..8b2883734 100644 --- a/assets/js/3ac72a53.47052c5b.js +++ b/assets/js/3ac72a53.0fb90efc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6152],{4937:a=>{a.exports=JSON.parse('{"tag":{"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/lemmy-forum","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4674],{8832:a=>{a.exports=JSON.parse('{"tag":{"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/lemmy-forum","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3af271b3.a8d18461.js b/assets/js/3af271b3.4197fc24.js similarity index 84% rename from assets/js/3af271b3.a8d18461.js rename to assets/js/3af271b3.4197fc24.js index a1455fcab..b50b01da5 100644 --- a/assets/js/3af271b3.a8d18461.js +++ b/assets/js/3af271b3.4197fc24.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6072],{4726:a=>{a.exports=JSON.parse('{"tag":{"label":"upcoming update","permalink":"/blog/tags/upcoming-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/upcoming-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6030],{6955:a=>{a.exports=JSON.parse('{"tag":{"label":"upcoming update","permalink":"/blog/tags/upcoming-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/upcoming-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3b659bf0.25a393d1.js b/assets/js/3b659bf0.00d57664.js similarity index 85% rename from assets/js/3b659bf0.25a393d1.js rename to assets/js/3b659bf0.00d57664.js index efad0a972..c93093755 100644 --- a/assets/js/3b659bf0.25a393d1.js +++ b/assets/js/3b659bf0.00d57664.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6635],{1069:e=>{e.exports=JSON.parse('{"tag":{"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/logo-deciphering","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3388],{3724:e=>{e.exports=JSON.parse('{"tag":{"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/logo-deciphering","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3bdf5af6.afdcb5a4.js b/assets/js/3bdf5af6.afdcb5a4.js deleted file mode 100644 index aa5c23a50..000000000 --- a/assets/js/3bdf5af6.afdcb5a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[15],{551:a=>{a.exports=JSON.parse('{"tag":{"label":"notes","permalink":"/blog/tags/notes","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/notes","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3bdf5af6.b8c2d0a1.js b/assets/js/3bdf5af6.b8c2d0a1.js new file mode 100644 index 000000000..2fbfa191c --- /dev/null +++ b/assets/js/3bdf5af6.b8c2d0a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9316],{5941:a=>{a.exports=JSON.parse('{"tag":{"label":"notes","permalink":"/blog/tags/notes","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/notes","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3f6275a8.2e6192a8.js b/assets/js/3f6275a8.2e6192a8.js new file mode 100644 index 000000000..5d379b077 --- /dev/null +++ b/assets/js/3f6275a8.2e6192a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5759],{1657:a=>{a.exports=JSON.parse('{"tag":{"label":"bugs","permalink":"/blog/tags/bugs","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/bugs","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3f99d67c.8306d15a.js b/assets/js/3f99d67c.64e39663.js similarity index 84% rename from assets/js/3f99d67c.8306d15a.js rename to assets/js/3f99d67c.64e39663.js index 910190b83..eee348cc7 100644 --- a/assets/js/3f99d67c.8306d15a.js +++ b/assets/js/3f99d67c.64e39663.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1283],{6250:a=>{a.exports=JSON.parse('{"tag":{"label":"new logo","permalink":"/blog/tags/new-logo","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/new-logo","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2690],{5374:a=>{a.exports=JSON.parse('{"tag":{"label":"new logo","permalink":"/blog/tags/new-logo","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/new-logo","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3fc2248c.1f5578e5.js b/assets/js/3fc2248c.1f5578e5.js deleted file mode 100644 index ede9d0fef..000000000 --- a/assets/js/3fc2248c.1f5578e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8038],{7029:a=>{a.exports=JSON.parse('{"tag":{"label":"Community Feedback","permalink":"/blog/tags/community-feedback","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community-feedback","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3fc2248c.d502764a.js b/assets/js/3fc2248c.d502764a.js new file mode 100644 index 000000000..21cac1aff --- /dev/null +++ b/assets/js/3fc2248c.d502764a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2762],{293:a=>{a.exports=JSON.parse('{"tag":{"label":"Community Feedback","permalink":"/blog/tags/community-feedback","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community-feedback","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3fc3119e.8a78f462.js b/assets/js/3fc3119e.8a78f462.js new file mode 100644 index 000000000..e7d9c51be --- /dev/null +++ b/assets/js/3fc3119e.8a78f462.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3470],{1214:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>n,toc:()=>c});var n=a(3143),r=a(6070),l=a(8591);const o={title:"Join the GameVault Early-Access Program Now!",authors:["alfagun74"],tags:["Gaming","GameVault","Early Access","UI Update","Beta Testing","Community Feedback","Exclusive Preview","Microsoft Store","Discord","Gaming Servers"]},i=void 0,s={authorsImageUrls:[void 0]},c=[];function u(e){const t={p:"p",strong:"strong",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"Hey, Guys!"}),"\n",(0,r.jsxs)(t.p,{children:["For the upcoming large UI update of GameVault, we're launching a brand new GameVault Early-Access Program, and we want ",(0,r.jsx)(t.strong,{children:"YOU"})," to be a part of it!"]})]})}function g(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>i});var n=a(758);const r={},l=n.createContext(r);function o(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(l.Provider,{value:t},e.children)}},3143:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/12/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-12-09.md","source":"@site/blog/2023-12-09.md","title":"Join the GameVault Early-Access Program Now!","description":"Hey, Guys!","date":"2023-12-09T00:00:00.000Z","tags":[{"inline":true,"label":"Gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Early Access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"UI Update","permalink":"/blog/tags/ui-update"},{"inline":true,"label":"Beta Testing","permalink":"/blog/tags/beta-testing"},{"inline":true,"label":"Community Feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview"},{"inline":true,"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers"}],"readingTime":1.135,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Join the GameVault Early-Access Program Now!","authors":["alfagun74"],"tags":["Gaming","GameVault","Early Access","UI Update","Beta Testing","Community Feedback","Exclusive Preview","Microsoft Store","Discord","Gaming Servers"]},"unlisted":false,"prevItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"},"nextItem":{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/"}}')}}]); \ No newline at end of file diff --git a/assets/js/3fc3119e.a97da495.js b/assets/js/3fc3119e.a97da495.js deleted file mode 100644 index bea36f402..000000000 --- a/assets/js/3fc3119e.a97da495.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1362],{6189:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var n=t(2676),l=t(8358);const o={title:"Join the GameVault Early-Access Program Now!",authors:["alfagun74"],tags:["Gaming","GameVault","Early Access","UI Update","Beta Testing","Community Feedback","Exclusive Preview","Microsoft Store","Discord","Gaming Servers"]},r=void 0,i={permalink:"/blog/2023/12/09/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-12-09.md",source:"@site/blog/2023-12-09.md",title:"Join the GameVault Early-Access Program Now!",description:"Hey, Guys!",date:"2023-12-09T00:00:00.000Z",tags:[{inline:!0,label:"Gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"Early Access",permalink:"/blog/tags/early-access"},{inline:!0,label:"UI Update",permalink:"/blog/tags/ui-update"},{inline:!0,label:"Beta Testing",permalink:"/blog/tags/beta-testing"},{inline:!0,label:"Community Feedback",permalink:"/blog/tags/community-feedback"},{inline:!0,label:"Exclusive Preview",permalink:"/blog/tags/exclusive-preview"},{inline:!0,label:"Microsoft Store",permalink:"/blog/tags/microsoft-store"},{inline:!0,label:"Discord",permalink:"/blog/tags/discord"},{inline:!0,label:"Gaming Servers",permalink:"/blog/tags/gaming-servers"}],readingTime:1.135,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Join the GameVault Early-Access Program Now!",authors:["alfagun74"],tags:["Gaming","GameVault","Early Access","UI Update","Beta Testing","Community Feedback","Exclusive Preview","Microsoft Store","Discord","Gaming Servers"]},unlisted:!1,prevItem:{title:"Announcing GameVault+ (coming soon)",permalink:"/blog/2024/03/28/"},nextItem:{title:"A Look Back and a Glimpse Forward",permalink:"/blog/2023/11/20/"}},s={authorsImageUrls:[void 0]},c=[];function g(e){const a={p:"p",strong:"strong",...(0,l.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey, Guys!"}),"\n",(0,n.jsxs)(a.p,{children:["For the upcoming large UI update of GameVault, we're launching a brand new GameVault Early-Access Program, and we want ",(0,n.jsx)(a.strong,{children:"YOU"})," to be a part of it!"]})]})}function m(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(g,{...e})}):g(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>i,a:()=>r});var n=t(5271);const l={},o=n.createContext(l);function r(e){const a=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/416eca3f.c4adc880.js b/assets/js/416eca3f.ae1b220f.js similarity index 85% rename from assets/js/416eca3f.c4adc880.js rename to assets/js/416eca3f.ae1b220f.js index f505b7cf8..b3847d998 100644 --- a/assets/js/416eca3f.c4adc880.js +++ b/assets/js/416eca3f.ae1b220f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4517],{3949:a=>{a.exports=JSON.parse('{"tag":{"label":"age restrictions","permalink":"/blog/tags/age-restrictions","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/age-restrictions","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8130],{9059:a=>{a.exports=JSON.parse('{"tag":{"label":"age restrictions","permalink":"/blog/tags/age-restrictions","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/age-restrictions","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/41e301a0.7724a9e3.js b/assets/js/41e301a0.a8fa4f4a.js similarity index 83% rename from assets/js/41e301a0.7724a9e3.js rename to assets/js/41e301a0.a8fa4f4a.js index a6fa4d661..df5d61cb6 100644 --- a/assets/js/41e301a0.7724a9e3.js +++ b/assets/js/41e301a0.a8fa4f4a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3712],{5581:l=>{l.exports=JSON.parse('{"tag":{"label":"trolls","permalink":"/blog/tags/trolls","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/trolls","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8160],{9976:l=>{l.exports=JSON.parse('{"tag":{"label":"trolls","permalink":"/blog/tags/trolls","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/trolls","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/435302bb.311555ff.js b/assets/js/435302bb.311555ff.js deleted file mode 100644 index cc5241dfd..000000000 --- a/assets/js/435302bb.311555ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2126],{5076:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var n=a(2676),i=a(8358);const o={sidebar_position:2},s="How to Use",r={id:"client-docs/how-to-use",title:"How to Use",description:"File & Folder Structure",source:"@site/docs/client-docs/how-to-use.md",sourceDirName:"client-docs",slug:"/client-docs/how-to-use",permalink:"/docs/client-docs/how-to-use",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/how-to-use.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docs",previous:{title:"Setting up a GameVault Client",permalink:"/docs/client-docs/setup"},next:{title:"Updating the Client",permalink:"/docs/client-docs/updating-client"}},l={},d=[{value:"File & Folder Structure",id:"file--folder-structure",level:2},{value:"Downloading Games",id:"downloading-games",level:2},{value:"1. Extracting the Game",id:"1-extracting-the-game",level:3},{value:"2. Installing the Game",id:"2-installing-the-game",level:3},{value:"Installing Portable Games",id:"installing-portable-games",level:4},{value:"Installing Setup Games",id:"installing-setup-games",level:4},{value:"Clearing Remains",id:"clearing-remains",level:4},{value:"Playing a Game",id:"playing-a-game",level:2},{value:"Tracking Your Game Progress",id:"tracking-your-game-progress",level:2},{value:"Modifying Games",id:"modifying-games",level:2},{value:"Modifying Users",id:"modifying-users",level:2},{value:"Exiting or Relaunching the App",id:"exiting-or-relaunching-the-app",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"how-to-use",children:"How to Use"})}),"\n",(0,n.jsx)(t.h2,{id:"file--folder-structure",children:"File & Folder Structure"}),"\n",(0,n.jsx)(t.admonition,{title:"Example",type:"note",children:(0,n.jsxs)(t.p,{children:["Let's say you installed GameVault freshly and configured your Root folder path to ",(0,n.jsx)(t.code,{children:"D:/"})," because your D Drive is larger."]})}),"\n",(0,n.jsx)(t.p,{children:"GameVault will now generate its folder structure. When everything is done, your file system will look like this:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"D:/GameVault/"})," - Root Folder","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"D:/GameVault/Downloads/"})," - This folder is where your downloads will be saved. For each downloaded game, GameVault generates a new folder in this directory."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.code,{children:"D:/GameVault/Installations/"})," - This folder is where your installed games belong. For each downloaded game, GameVault generates a new folder in this directory."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"downloading-games",children:"Downloading Games"}),"\n",(0,n.jsxs)(t.p,{children:["Let's say you found the game ",(0,n.jsx)(t.code,{children:"Assassin's Creed Unity (Game ID: 74)"})," in the Library tab and chose to download it."]}),"\n",(0,n.jsx)(t.admonition,{type:"warning",children:(0,n.jsx)(t.p,{children:"Only download games from servers you fully trust! There's a potential risk of malware. If your antivirus alerts during the following process, abort any download and installation of the game, fully delete the downloaded data, and warn your server admins to address the malware promptly."})}),"\n",(0,n.jsx)(t.p,{children:"As stated above, GameVault generates two folders to store the game files and uses the game ID in the name to identify them:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:" /GameVault/Downloads/(74) Assassin's Creed Unity/"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:" /GameVault/Installations/(74) Assassin's Creed Unity/"})}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Your downloaded game archive will be saved in ",(0,n.jsx)(t.code,{children:" /GameVault/Downloads/(74) Assassin's Creed Unity/"}),". The ",(0,n.jsx)(t.code,{children:" /GameVault/Installations/(74) Assassin's Creed Unity/"})," folder should be empty for now."]}),"\n",(0,n.jsx)(t.p,{children:"To start playing a game you've downloaded, follow these steps to install it. This process makes it easier for you."}),"\n",(0,n.jsx)(t.p,{children:"Game installation has two main parts:"}),"\n",(0,n.jsx)(t.h3,{id:"1-extracting-the-game",children:"1. Extracting the Game"}),"\n",(0,n.jsxs)(t.p,{children:["GameVault games are ",(0,n.jsx)(t.a,{href:"/docs/server-docs/structure",children:"always served in some kind of archive format"}),". So you will need to extract them."]}),"\n",(0,n.jsxs)(t.p,{children:["After the download is complete, locate the ",(0,n.jsx)(t.code,{children:"Extract"})," button. Clicking it will extract the game into a subfolder called ",(0,n.jsx)(t.code,{children:"Extracted"})," within the game's Download Directory. A progress bar shows the extraction progress and estimated remaining time. Larger or extremely compressed games may take longer to extract."]}),"\n",(0,n.jsx)(t.p,{children:"If there are extraction errors, you can retry the extraction unless you deleted the game archive. Error details are displayed in the user interface. If you encounter repeated extraction errors for the same game, try to extract the game manually or contact your GameVault server administrators to check the integrity of those games."}),"\n",(0,n.jsx)(t.h3,{id:"2-installing-the-game",children:"2. Installing the Game"}),"\n",(0,n.jsxs)(t.p,{children:["There are different types of GameVault games. ",(0,n.jsx)(t.a,{href:"/docs/server-docs/game-types",children:"You can find more information about them here"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"For now, we will focus on the general concept of Portable and Setup Games."}),"\n",(0,n.jsx)(t.p,{children:"Portable games are ready to play out of the box, while Setup games require additional setup before playing."}),"\n",(0,n.jsx)(t.admonition,{title:"What determines the game type?",type:"note",children:(0,n.jsxs)(t.p,{children:["The server automatically tries to determine the game's type based on the content, but errors can occur. Administrators can manually overwrite the detected game type by including a ",(0,n.jsx)(t.a,{href:"/docs/server-docs/structure",children:"type override in the file name"}),"."]})}),"\n",(0,n.jsx)(t.h4,{id:"installing-portable-games",children:"Installing Portable Games"}),"\n",(0,n.jsxs)(t.p,{children:["For portable games, GameVault provides a very simple installation process. You don't need to select an executable file. Just press the ",(0,n.jsx)(t.code,{children:"Install"})," button. GameVault will automatically move all the extracted game content to your game's installation directory. This should happen instantly."]}),"\n",(0,n.jsxs)(t.p,{children:["Once the installation is complete, your game is ready to be played in the library. If necessary, select the appropriate executable file to launch in the Game Settings tab and click ",(0,n.jsx)(t.code,{children:"Play"}),"."]}),"\n",(0,n.jsx)(t.admonition,{title:"No Game Executable",type:"note",children:(0,n.jsx)(t.p,{children:"If you don't see a game executable here but instead see a setup executable, the game's type has incorrectly been set to a portable type on the server. Contact your server administrators to manually override that game's type to a setup type. Then, manually move the files inside your game's installation folder back into the game's download folder. Run the installer and manually select the now-empty game's installation folder as its destination."})}),"\n",(0,n.jsx)(t.h4,{id:"installing-setup-games",children:"Installing Setup Games"}),"\n",(0,n.jsxs)(t.p,{children:["For games that require installation, GameVault will provide a dropdown menu to launch a setup executable file. Select the appropriate setup.exe file and press the ",(0,n.jsx)(t.code,{children:"Install"})," button."]}),"\n",(0,n.jsx)(t.admonition,{title:"No Setup Executable",type:"note",children:(0,n.jsxs)(t.p,{children:["If you don't see a setup executable here but instead see the game's executable, it may have incorrectly been set to a setup type on the server. Contact your server administrators to manually override that game's type to a portable type. Then, manually move the files inside the game downloads ",(0,n.jsx)(t.code,{children:"Extracted/"})," folder to the game's corresponding installation folder, and you should be ready to play."]})}),"\n",(0,n.jsxs)(t.p,{children:["During the external setup process ",(0,n.jsx)(t.strong,{children:"it is crucial to set the destination folder for your game files to your game's Installation folder"})," (e.g., ",(0,n.jsx)(t.code,{children:" /GameVault/Installations/(74) Assassin's Creed Unity/"}),"). This is where the final game files and executable should be located. If you don't set the destination, GameVault will have no idea where to look for your game files, and the game won't be playable. If you missed setting the destination folder or set it wrongly, uninstall the game from your system and retry this step."]}),"\n",(0,n.jsxs)(t.p,{children:["Once the installation is complete, your game is ready to be played. Just select the appropriate .exe file to launch in the Installations tab and click ",(0,n.jsx)(t.code,{children:"Play"}),"."]}),"\n",(0,n.jsx)(t.admonition,{title:"Why does GameVault not fully automate the setup procedure?",type:"info",children:(0,n.jsx)(t.p,{children:"Different external installers and setups work very differently, making it nearly impossible to fully automate every type. However, all installers have one thing in common: the ability to choose the installation path for the game. GameVault guides you through the process, but you still need to manually select the installation path and click through the installer."})}),"\n",(0,n.jsx)(t.h4,{id:"clearing-remains",children:"Clearing Remains"}),"\n",(0,n.jsx)(t.p,{children:"Once you have fully confirmed that a game works, you are free to delete the game's corresponding Download using the trash icon in the downloads tab."}),"\n",(0,n.jsx)(t.h2,{id:"playing-a-game",children:"Playing a Game"}),"\n",(0,n.jsxs)(t.p,{children:["Launching a game on GameVault is simple. Once your game is installed and ready to go, it will appear in the \"Installed Games\" tab. If GameVault didn't correctly predict the correct executable to launch automatically, you can change it in the game's settings and click the ",(0,n.jsx)(t.code,{children:"Play"})," button to start the game."]}),"\n",(0,n.jsx)(t.h2,{id:"tracking-your-game-progress",children:"Tracking Your Game Progress"}),"\n",(0,n.jsxs)(t.p,{children:["Once GameVault is launched, it automatically activates a time-tracking daemon. This diligent daemon continuously monitors your game progress, specifically your playtime, and promptly sends this information to the server whenever any .exe file (except those on the ignore-list) is running within a folder located in your Installations directory ",(0,n.jsx)(t.code,{children:" /Installations/*"}),". Even if you play without an internet connection, your playtime will still be tracked and updated on the server as soon as you regain connectivity."]}),"\n",(0,n.jsx)(t.p,{children:'In our context, the term "Progress" refers to a user\'s activity of playing a game. Each user can have a single progress entry per game.'}),"\n",(0,n.jsx)(t.p,{children:"The progress entry includes the completion state, which can be modified through the community tab, as well as the tracked playtime and some other additional information."}),"\n",(0,n.jsx)(t.p,{children:"You have the ability to change the progress state or delete it using the community tab. Certain states also change automatically, such as transitioning from UNPLAYED to PLAYING when the game is launched."}),"\n",(0,n.jsx)(t.admonition,{type:"warning",children:(0,n.jsx)(t.p,{children:"Please note that this Progress does not include your savegames. GameVault does not (yet \ud83d\ude09) have the capability to synchronize or store your savegames. Therefore, it is advisable to create backups of your savegames before uninstalling any games."})}),"\n",(0,n.jsx)(t.h2,{id:"modifying-games",children:"Modifying Games"}),"\n",(0,n.jsx)(t.p,{children:"If you are unhappy with the Box Art or Background Image of a game on your server or if there are incorrect Metadata associated with a game, there is a straightforward solution."}),"\n",(0,n.jsxs)(t.p,{children:["If you have the ",(0,n.jsx)(t.code,{children:"EDITOR"})," role or higher on your GameVault server, you can modify games by following these steps:"]}),"\n",(0,n.jsx)(t.p,{children:"Open the game settings by clicking on the settings icon, either in the top-right corner of the box art image or on the game's detail page. A popup will appear."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Under ",(0,n.jsx)(t.strong,{children:"Edit Images"}),", you can select/paste/drop an image or paste a URL for different box art or background image."]}),"\n",(0,n.jsxs)(t.li,{children:["Under ",(0,n.jsx)(t.strong,{children:"Metadata"}),", you can remap/unmap incorrectly associated metadata for each provider."]}),"\n",(0,n.jsxs)(t.li,{children:["Under ",(0,n.jsx)(t.strong,{children:"Custom Metadata"}),", you can manually overwrite the Metadata of the game."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Please note that any changes made will affect all users on the server."}),"\n",(0,n.jsx)(t.h2,{id:"modifying-users",children:"Modifying Users"}),"\n",(0,n.jsx)(t.p,{children:"If you want to change the data, profile picture, or background image of your User:"}),"\n",(0,n.jsx)(t.p,{children:"Click your User Icon on the top left corner, then locate and click on the Settings Icon in the top right corner, and a popup will appear."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Under ",(0,n.jsx)(t.strong,{children:"Edit Images"}),", you can select/paste/drop an image or paste a URL for different avatar or background image."]}),"\n",(0,n.jsxs)(t.li,{children:["Under ",(0,n.jsx)(t.strong,{children:"Edit Details"}),", you can change the data of your user."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["If you have the ",(0,n.jsx)(t.code,{children:"ADMIN"})," role or higher on your GameVault server, you can do the same for all other user profiles in the Admin Dashboard."]}),"\n",(0,n.jsx)(t.h2,{id:"exiting-or-relaunching-the-app",children:"Exiting or Relaunching the App"}),"\n",(0,n.jsx)(t.p,{children:'In order to maintain playtime tracking functionality, simply closing the launcher using the X-Button does not terminate the GameVault process. Instead, it minimizes the app to the system Tray. Therefore, if you truly wish to exit the application, be sure to right-click and select "Exit" from the context menu. The same principle applies when restarting the app. Only one GameVault window can be active at a time, so initiating another GameVault merely brings the minimized app to the forefront without actually restarting it.'})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8358:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>s});var n=a(5271);const i={},o=n.createContext(i);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/435302bb.82bb51e9.js b/assets/js/435302bb.82bb51e9.js new file mode 100644 index 000000000..5f39d836d --- /dev/null +++ b/assets/js/435302bb.82bb51e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2298],{7164:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"client-docs/how-to-use","title":"How to Use","description":"File & Folder Structure","source":"@site/docs/client-docs/how-to-use.md","sourceDirName":"client-docs","slug":"/client-docs/how-to-use","permalink":"/docs/client-docs/how-to-use","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/how-to-use.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docs","previous":{"title":"Setting up a GameVault Client","permalink":"/docs/client-docs/setup"},"next":{"title":"Updating the Client","permalink":"/docs/client-docs/updating-client"}}');var i=a(6070),o=a(8591);const s={sidebar_position:2},r="How to Use",l={},d=[{value:"File & Folder Structure",id:"file--folder-structure",level:2},{value:"Downloading Games",id:"downloading-games",level:2},{value:"1. Extracting the Game",id:"1-extracting-the-game",level:3},{value:"2. Installing the Game",id:"2-installing-the-game",level:3},{value:"Installing Portable Games",id:"installing-portable-games",level:4},{value:"Installing Setup Games",id:"installing-setup-games",level:4},{value:"Clearing Remains",id:"clearing-remains",level:4},{value:"Playing a Game",id:"playing-a-game",level:2},{value:"Tracking Your Game Progress",id:"tracking-your-game-progress",level:2},{value:"Modifying Games",id:"modifying-games",level:2},{value:"Modifying Users",id:"modifying-users",level:2},{value:"Exiting or Relaunching the App",id:"exiting-or-relaunching-the-app",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"how-to-use",children:"How to Use"})}),"\n",(0,i.jsx)(t.h2,{id:"file--folder-structure",children:"File & Folder Structure"}),"\n",(0,i.jsx)(t.admonition,{title:"Example",type:"note",children:(0,i.jsxs)(t.p,{children:["Let's say you installed GameVault freshly and configured your Root folder path to ",(0,i.jsx)(t.code,{children:"D:/"})," because your D Drive is larger."]})}),"\n",(0,i.jsx)(t.p,{children:"GameVault will now generate its folder structure. When everything is done, your file system will look like this:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"D:/GameVault/"})," - Root Folder","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"D:/GameVault/Downloads/"})," - This folder is where your downloads will be saved. For each downloaded game, GameVault generates a new folder in this directory."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"D:/GameVault/Installations/"})," - This folder is where your installed games belong. For each downloaded game, GameVault generates a new folder in this directory."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"downloading-games",children:"Downloading Games"}),"\n",(0,i.jsxs)(t.p,{children:["Let's say you found the game ",(0,i.jsx)(t.code,{children:"Assassin's Creed Unity (Game ID: 74)"})," in the Library tab and chose to download it."]}),"\n",(0,i.jsx)(t.admonition,{type:"warning",children:(0,i.jsx)(t.p,{children:"Only download games from servers you fully trust! There's a potential risk of malware. If your antivirus alerts during the following process, abort any download and installation of the game, fully delete the downloaded data, and warn your server admins to address the malware promptly."})}),"\n",(0,i.jsx)(t.p,{children:"As stated above, GameVault generates two folders to store the game files and uses the game ID in the name to identify them:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.code,{children:" /GameVault/Downloads/(74) Assassin's Creed Unity/"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.code,{children:" /GameVault/Installations/(74) Assassin's Creed Unity/"})}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Your downloaded game archive will be saved in ",(0,i.jsx)(t.code,{children:" /GameVault/Downloads/(74) Assassin's Creed Unity/"}),". The ",(0,i.jsx)(t.code,{children:" /GameVault/Installations/(74) Assassin's Creed Unity/"})," folder should be empty for now."]}),"\n",(0,i.jsx)(t.p,{children:"To start playing a game you've downloaded, follow these steps to install it. This process makes it easier for you."}),"\n",(0,i.jsx)(t.p,{children:"Game installation has two main parts:"}),"\n",(0,i.jsx)(t.h3,{id:"1-extracting-the-game",children:"1. Extracting the Game"}),"\n",(0,i.jsxs)(t.p,{children:["GameVault games are ",(0,i.jsx)(t.a,{href:"/docs/server-docs/structure",children:"always served in some kind of archive format"}),". So you will need to extract them."]}),"\n",(0,i.jsxs)(t.p,{children:["After the download is complete, locate the ",(0,i.jsx)(t.code,{children:"Extract"})," button. Clicking it will extract the game into a subfolder called ",(0,i.jsx)(t.code,{children:"Extracted"})," within the game's Download Directory. A progress bar shows the extraction progress and estimated remaining time. Larger or extremely compressed games may take longer to extract."]}),"\n",(0,i.jsx)(t.p,{children:"If there are extraction errors, you can retry the extraction unless you deleted the game archive. Error details are displayed in the user interface. If you encounter repeated extraction errors for the same game, try to extract the game manually or contact your GameVault server administrators to check the integrity of those games."}),"\n",(0,i.jsx)(t.h3,{id:"2-installing-the-game",children:"2. Installing the Game"}),"\n",(0,i.jsxs)(t.p,{children:["There are different types of GameVault games. ",(0,i.jsx)(t.a,{href:"/docs/server-docs/game-types",children:"You can find more information about them here"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"For now, we will focus on the general concept of Portable and Setup Games."}),"\n",(0,i.jsx)(t.p,{children:"Portable games are ready to play out of the box, while Setup games require additional setup before playing."}),"\n",(0,i.jsx)(t.admonition,{title:"What determines the game type?",type:"note",children:(0,i.jsxs)(t.p,{children:["The server automatically tries to determine the game's type based on the content, but errors can occur. Administrators can manually overwrite the detected game type by including a ",(0,i.jsx)(t.a,{href:"/docs/server-docs/structure",children:"type override in the file name"}),"."]})}),"\n",(0,i.jsx)(t.h4,{id:"installing-portable-games",children:"Installing Portable Games"}),"\n",(0,i.jsxs)(t.p,{children:["For portable games, GameVault provides a very simple installation process. You don't need to select an executable file. Just press the ",(0,i.jsx)(t.code,{children:"Install"})," button. GameVault will automatically move all the extracted game content to your game's installation directory. This should happen instantly."]}),"\n",(0,i.jsxs)(t.p,{children:["Once the installation is complete, your game is ready to be played in the library. If necessary, select the appropriate executable file to launch in the Game Settings tab and click ",(0,i.jsx)(t.code,{children:"Play"}),"."]}),"\n",(0,i.jsx)(t.admonition,{title:"No Game Executable",type:"note",children:(0,i.jsx)(t.p,{children:"If you don't see a game executable here but instead see a setup executable, the game's type has incorrectly been set to a portable type on the server. Contact your server administrators to manually override that game's type to a setup type. Then, manually move the files inside your game's installation folder back into the game's download folder. Run the installer and manually select the now-empty game's installation folder as its destination."})}),"\n",(0,i.jsx)(t.h4,{id:"installing-setup-games",children:"Installing Setup Games"}),"\n",(0,i.jsxs)(t.p,{children:["For games that require installation, GameVault will provide a dropdown menu to launch a setup executable file. Select the appropriate setup.exe file and press the ",(0,i.jsx)(t.code,{children:"Install"})," button."]}),"\n",(0,i.jsx)(t.admonition,{title:"No Setup Executable",type:"note",children:(0,i.jsxs)(t.p,{children:["If you don't see a setup executable here but instead see the game's executable, it may have incorrectly been set to a setup type on the server. Contact your server administrators to manually override that game's type to a portable type. Then, manually move the files inside the game downloads ",(0,i.jsx)(t.code,{children:"Extracted/"})," folder to the game's corresponding installation folder, and you should be ready to play."]})}),"\n",(0,i.jsxs)(t.p,{children:["During the external setup process ",(0,i.jsx)(t.strong,{children:"it is crucial to set the destination folder for your game files to your game's Installation folder"})," (e.g., ",(0,i.jsx)(t.code,{children:" /GameVault/Installations/(74) Assassin's Creed Unity/"}),"). This is where the final game files and executable should be located. If you don't set the destination, GameVault will have no idea where to look for your game files, and the game won't be playable. If you missed setting the destination folder or set it wrongly, uninstall the game from your system and retry this step."]}),"\n",(0,i.jsxs)(t.p,{children:["Once the installation is complete, your game is ready to be played. Just select the appropriate .exe file to launch in the Installations tab and click ",(0,i.jsx)(t.code,{children:"Play"}),"."]}),"\n",(0,i.jsx)(t.admonition,{title:"Why does GameVault not fully automate the setup procedure?",type:"info",children:(0,i.jsx)(t.p,{children:"Different external installers and setups work very differently, making it nearly impossible to fully automate every type. However, all installers have one thing in common: the ability to choose the installation path for the game. GameVault guides you through the process, but you still need to manually select the installation path and click through the installer."})}),"\n",(0,i.jsx)(t.h4,{id:"clearing-remains",children:"Clearing Remains"}),"\n",(0,i.jsx)(t.p,{children:"Once you have fully confirmed that a game works, you are free to delete the game's corresponding Download using the trash icon in the downloads tab."}),"\n",(0,i.jsx)(t.h2,{id:"playing-a-game",children:"Playing a Game"}),"\n",(0,i.jsxs)(t.p,{children:["Launching a game on GameVault is simple. Once your game is installed and ready to go, it will appear in the \"Installed Games\" tab. If GameVault didn't correctly predict the correct executable to launch automatically, you can change it in the game's settings and click the ",(0,i.jsx)(t.code,{children:"Play"})," button to start the game."]}),"\n",(0,i.jsx)(t.h2,{id:"tracking-your-game-progress",children:"Tracking Your Game Progress"}),"\n",(0,i.jsxs)(t.p,{children:["Once GameVault is launched, it automatically activates a time-tracking daemon. This diligent daemon continuously monitors your game progress, specifically your playtime, and promptly sends this information to the server whenever any .exe file (except those on the ignore-list) is running within a folder located in your Installations directory ",(0,i.jsx)(t.code,{children:" /Installations/*"}),". Even if you play without an internet connection, your playtime will still be tracked and updated on the server as soon as you regain connectivity."]}),"\n",(0,i.jsx)(t.p,{children:'In our context, the term "Progress" refers to a user\'s activity of playing a game. Each user can have a single progress entry per game.'}),"\n",(0,i.jsx)(t.p,{children:"The progress entry includes the completion state, which can be modified through the community tab, as well as the tracked playtime and some other additional information."}),"\n",(0,i.jsx)(t.p,{children:"You have the ability to change the progress state or delete it using the community tab. Certain states also change automatically, such as transitioning from UNPLAYED to PLAYING when the game is launched."}),"\n",(0,i.jsx)(t.admonition,{type:"warning",children:(0,i.jsx)(t.p,{children:"Please note that this Progress does not include your savegames. GameVault does not (yet \ud83d\ude09) have the capability to synchronize or store your savegames. Therefore, it is advisable to create backups of your savegames before uninstalling any games."})}),"\n",(0,i.jsx)(t.h2,{id:"modifying-games",children:"Modifying Games"}),"\n",(0,i.jsx)(t.p,{children:"If you are unhappy with the Box Art or Background Image of a game on your server or if there are incorrect Metadata associated with a game, there is a straightforward solution."}),"\n",(0,i.jsxs)(t.p,{children:["If you have the ",(0,i.jsx)(t.code,{children:"EDITOR"})," role or higher on your GameVault server, you can modify games by following these steps:"]}),"\n",(0,i.jsx)(t.p,{children:"Open the game settings by clicking on the settings icon, either in the top-right corner of the box art image or on the game's detail page. A popup will appear."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Under ",(0,i.jsx)(t.strong,{children:"Edit Images"}),", you can select/paste/drop an image or paste a URL for different box art or background image."]}),"\n",(0,i.jsxs)(t.li,{children:["Under ",(0,i.jsx)(t.strong,{children:"Metadata"}),", you can remap/unmap incorrectly associated metadata for each provider."]}),"\n",(0,i.jsxs)(t.li,{children:["Under ",(0,i.jsx)(t.strong,{children:"Custom Metadata"}),", you can manually overwrite the Metadata of the game."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"Please note that any changes made will affect all users on the server."}),"\n",(0,i.jsx)(t.h2,{id:"modifying-users",children:"Modifying Users"}),"\n",(0,i.jsx)(t.p,{children:"If you want to change the data, profile picture, or background image of your User:"}),"\n",(0,i.jsx)(t.p,{children:"Click your User Icon on the top left corner, then locate and click on the Settings Icon in the top right corner, and a popup will appear."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Under ",(0,i.jsx)(t.strong,{children:"Edit Images"}),", you can select/paste/drop an image or paste a URL for different avatar or background image."]}),"\n",(0,i.jsxs)(t.li,{children:["Under ",(0,i.jsx)(t.strong,{children:"Edit Details"}),", you can change the data of your user."]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["If you have the ",(0,i.jsx)(t.code,{children:"ADMIN"})," role or higher on your GameVault server, you can do the same for all other user profiles in the Admin Dashboard."]}),"\n",(0,i.jsx)(t.h2,{id:"exiting-or-relaunching-the-app",children:"Exiting or Relaunching the App"}),"\n",(0,i.jsx)(t.p,{children:'In order to maintain playtime tracking functionality, simply closing the launcher using the X-Button does not terminate the GameVault process. Instead, it minimizes the app to the system Tray. Therefore, if you truly wish to exit the application, be sure to right-click and select "Exit" from the context menu. The same principle applies when restarting the app. Only one GameVault window can be active at a time, so initiating another GameVault merely brings the minimized app to the forefront without actually restarting it.'})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>r});var n=a(758);const i={},o=n.createContext(i);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/438c7fa2.0f3b2c38.js b/assets/js/438c7fa2.0f3b2c38.js new file mode 100644 index 000000000..4c0d2a3b2 --- /dev/null +++ b/assets/js/438c7fa2.0f3b2c38.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8733],{1834:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"server-docs/server-news","title":"Server News","description":"You can keep your users informed by adding a news.md file. Use it to link your game wishlist form, share key updates, or simply greet them.","source":"@site/docs/server-docs/server-news.md","sourceDirName":"server-docs","slug":"/server-docs/server-news","permalink":"/docs/server-docs/server-news","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/server-news.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":11,"frontMatter":{"sidebar_position":11},"sidebar":"docs","previous":{"title":"Parental Control","permalink":"/docs/server-docs/parental-control"},"next":{"title":"Setting up a GameVault Client","permalink":"/docs/client-docs/setup"}}');var r=n(6070),o=n(8591);const i={sidebar_position:11},a="Server News",d={},c=[];function l(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"server-news",children:"Server News"})}),"\n",(0,r.jsxs)(s.p,{children:["You can keep your users informed by adding a ",(0,r.jsx)(s.code,{children:"news.md"})," file. Use it to link your game wishlist form, share key updates, or simply greet them."]}),"\n",(0,r.jsxs)(s.p,{children:["This file supports ",(0,r.jsx)(s.a,{href:"https://wikipedia.org/wiki/Markdown",children:"Markdown"})," syntax, making it easy to format and structure your content. You can edit the ",(0,r.jsx)(s.code,{children:"news.md"})," file using any text editor or script. It is located at ",(0,r.jsx)(s.code,{children:"/config/news.md"}),". If you're using Docker, simply mount that folder as a volume:"]}),"\n",(0,r.jsx)(s.admonition,{type:"note",children:(0,r.jsxs)(s.p,{children:["When updating the ",(0,r.jsx)(s.code,{children:"news.md"})," file., users will receive a notification ping-icon in their client, ensuring they see the latest news."]})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"[...]\nvolumes:\n - /your/config/folder:/config\n - [...]\n[...]\n"})})]})}function u(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8591:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>a});var t=n(758);const r={},o=t.createContext(r);function i(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/438c7fa2.c8ca3637.js b/assets/js/438c7fa2.c8ca3637.js deleted file mode 100644 index 1a0330840..000000000 --- a/assets/js/438c7fa2.c8ca3637.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1601],{5729:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=s(2676),r=s(8358);const o={sidebar_position:11},i="Server News",a={id:"server-docs/server-news",title:"Server News",description:"You can keep your users informed by adding a news.md file. Use it to link your game wishlist form, share key updates, or simply greet them.",source:"@site/docs/server-docs/server-news.md",sourceDirName:"server-docs",slug:"/server-docs/server-news",permalink:"/docs/server-docs/server-news",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/server-news.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:11,frontMatter:{sidebar_position:11},sidebar:"docs",previous:{title:"Parental Control",permalink:"/docs/server-docs/parental-control"},next:{title:"Setting up a GameVault Client",permalink:"/docs/client-docs/setup"}},d={},c=[];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"server-news",children:"Server News"})}),"\n",(0,t.jsxs)(n.p,{children:["You can keep your users informed by adding a ",(0,t.jsx)(n.code,{children:"news.md"})," file. Use it to link your game wishlist form, share key updates, or simply greet them."]}),"\n",(0,t.jsxs)(n.p,{children:["This file supports ",(0,t.jsx)(n.a,{href:"https://wikipedia.org/wiki/Markdown",children:"Markdown"})," syntax, making it easy to format and structure your content. You can edit the ",(0,t.jsx)(n.code,{children:"news.md"})," file using any text editor or script. It is located at ",(0,t.jsx)(n.code,{children:"/config/news.md"}),". If you're using Docker, simply mount that folder as a volume:"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["When updating the ",(0,t.jsx)(n.code,{children:"news.md"})," file., users will receive a notification ping-icon in their client, ensuring they see the latest news."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"[...]\nvolumes:\n - /your/config/folder:/config\n - [...]\n[...]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8358:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>i});var t=s(5271);const r={},o=t.createContext(r);function i(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4534f50b.15c88222.js b/assets/js/4534f50b.2f84efd3.js similarity index 84% rename from assets/js/4534f50b.15c88222.js rename to assets/js/4534f50b.2f84efd3.js index bf6e032b2..3f4129b6c 100644 --- a/assets/js/4534f50b.15c88222.js +++ b/assets/js/4534f50b.2f84efd3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7253],{3695:a=>{a.exports=JSON.parse('{"tag":{"label":"threats","permalink":"/blog/tags/threats","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/threats","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2206],{2268:a=>{a.exports=JSON.parse('{"tag":{"label":"threats","permalink":"/blog/tags/threats","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/threats","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/46e7f252.a3647008.js b/assets/js/46e7f252.3103dec3.js similarity index 84% rename from assets/js/46e7f252.a3647008.js rename to assets/js/46e7f252.3103dec3.js index c71388c12..458b3318d 100644 --- a/assets/js/46e7f252.a3647008.js +++ b/assets/js/46e7f252.3103dec3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9190],{6312:a=>{a.exports=JSON.parse('{"tag":{"label":"metadata","permalink":"/blog/tags/metadata","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/metadata","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9724],{5469:a=>{a.exports=JSON.parse('{"tag":{"label":"metadata","permalink":"/blog/tags/metadata","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/metadata","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/47aca6da.d22b953e.js b/assets/js/47aca6da.d22b953e.js deleted file mode 100644 index b954e7935..000000000 --- a/assets/js/47aca6da.d22b953e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3465],{3692:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var o=n(2676),a=n(8358);const l={title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",authors:["alfagun74"],tags:["April Fools"]},i=void 0,r={permalink:"/blog/2024/04/01/2024-04-01/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-01/2024-04-01.md",source:"@site/blog/2024-04-01/2024-04-01.md",title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",description:"Hey Everyone!",date:"2024-04-01T00:00:00.000Z",tags:[{inline:!0,label:"April Fools",permalink:"/blog/tags/april-fools"}],readingTime:1.605,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",authors:["alfagun74"],tags:["April Fools"]},unlisted:!1,prevItem:{title:"GameVault+ out now",permalink:"/blog/2024/04/14/"},nextItem:{title:"Announcing GameVault+ (coming soon)",permalink:"/blog/2024/03/28/"}},s={authorsImageUrls:[void 0]},c=[];function u(e){const t={p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,o.jsxs)(t.p,{children:["The moment you've been waiting for is finally here. We've been working hard on it for months and are thrilled to announce that GameVault Client Application is ",(0,o.jsx)(t.strong,{children:"now available on Windows Phone 7"}),", powered by ",(0,o.jsx)(t.strong,{children:"Microsoft Silverlight"}),"!"]})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var o=n(5271);const a={},l=o.createContext(a);function i(e){const t=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/47aca6da.d3e3ecf1.js b/assets/js/47aca6da.d3e3ecf1.js new file mode 100644 index 000000000..4c0efc354 --- /dev/null +++ b/assets/js/47aca6da.d3e3ecf1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6484],{4564:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var o=n(4507),a=n(6070),l=n(8591);const i={title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",authors:["alfagun74"],tags:["April Fools"]},r=void 0,s={authorsImageUrls:[void 0]},u=[];function c(e){const t={p:"p",strong:"strong",...(0,l.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,a.jsxs)(t.p,{children:["The moment you've been waiting for is finally here. We've been working hard on it for months and are thrilled to announce that GameVault Client Application is ",(0,a.jsx)(t.strong,{children:"now available on Windows Phone 7"}),", powered by ",(0,a.jsx)(t.strong,{children:"Microsoft Silverlight"}),"!"]})]})}function d(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var o=n(758);const a={},l=o.createContext(a);function i(e){const t=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(l.Provider,{value:t},e.children)}},4507:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/04/01/2024-04-01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-01/2024-04-01.md","source":"@site/blog/2024-04-01/2024-04-01.md","title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","description":"Hey Everyone!","date":"2024-04-01T00:00:00.000Z","tags":[{"inline":true,"label":"April Fools","permalink":"/blog/tags/april-fools"}],"readingTime":1.605,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","authors":["alfagun74"],"tags":["April Fools"]},"unlisted":false,"prevItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"},"nextItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"}}')}}]); \ No newline at end of file diff --git a/assets/js/4a631206.7cbbf92f.js b/assets/js/4a631206.7cbbf92f.js new file mode 100644 index 000000000..5636ec0ae --- /dev/null +++ b/assets/js/4a631206.7cbbf92f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6188],{8066:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"server-docs/updating-games","title":"Updating Games","description":"Applying an Update to a Game","source":"@site/docs/server-docs/updating-games.md","sourceDirName":"server-docs","slug":"/server-docs/updating-games","permalink":"/docs/server-docs/updating-games","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/updating-games.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":5,"frontMatter":{"sidebar_position":5},"sidebar":"docs","previous":{"title":"Adding Games to GameVault","permalink":"/docs/server-docs/adding-games"},"next":{"title":"User Management","permalink":"/docs/server-docs/user-management"}}');var s=a(6070),i=a(8591);const r={sidebar_position:5},o="Updating Games",d={},l=[{value:"Applying an Update to a Game",id:"applying-an-update-to-a-game",level:2},{value:"Example",id:"example",level:3},{value:"Changing or Moving a Game",id:"changing-or-moving-a-game",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"updating-games",children:"Updating Games"})}),"\n",(0,s.jsx)(n.h2,{id:"applying-an-update-to-a-game",children:"Applying an Update to a Game"}),"\n",(0,s.jsxs)(n.p,{children:["To update a game, simply delete the existing game file and replace it with a new one in the files directory (by default ",(0,s.jsx)(n.code,{children:"/files"}),")."]}),"\n",(0,s.jsxs)(n.p,{children:["You can freely modify the early access and version flags of your game. As long as the ",(0,s.jsx)(n.strong,{children:"path"})," or ",(0,s.jsx)(n.strong,{children:"the combination of title and release year"})," of the new file matches the old file, GameVault's indexer will recognize it as an update. The same game entity will be restored if needed and updated with the new file's information, while preserving any progress associated with the game."]}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Let's say you have a very outdated version of the game ",(0,s.jsx)(n.code,{children:"Minecraft (EA) (v1.8b) (2011).zip"})," and you want to update it to the newest version, such as ",(0,s.jsx)(n.code,{children:"Minecraft (v1.20.1) (2011).7z"}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Delete ",(0,s.jsx)(n.code,{children:"Minecraft (EA) (v1.8b) (2011).zip"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Insert ",(0,s.jsx)(n.code,{children:"Minecraft (v1.20.1) (2011).7z"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Wait for the automatic indexing process to detect and register the changes."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you want to keep multiple versions of the same game, refer to the documentation on ",(0,s.jsx)(n.a,{href:"/docs/server-docs/adding-games#adding-the-same-game-multiple-times",children:"adding the same game multiple times"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"changing-or-moving-a-game",children:"Changing or Moving a Game"}),"\n",(0,s.jsxs)(n.p,{children:["Changing or moving a game is also a breeze. As long as the ",(0,s.jsx)(n.strong,{children:"path"})," or ",(0,s.jsx)(n.strong,{children:"the combination of title and release year"})," of the moved or renamed file matches the old file, GameVault's indexer will recognize it as an update. The same game entity will be updated with the new file's information, while preserving any progress associated with the game."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8591:(e,n,a)=>{a.d(n,{R:()=>r,x:()=>o});var t=a(758);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a631206.7f9769a2.js b/assets/js/4a631206.7f9769a2.js deleted file mode 100644 index e370f75c1..000000000 --- a/assets/js/4a631206.7f9769a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7937],{6226:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var t=a(2676),s=a(8358);const i={sidebar_position:5},r="Updating Games",o={id:"server-docs/updating-games",title:"Updating Games",description:"Applying an Update to a Game",source:"@site/docs/server-docs/updating-games.md",sourceDirName:"server-docs",slug:"/server-docs/updating-games",permalink:"/docs/server-docs/updating-games",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/updating-games.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"docs",previous:{title:"Adding Games to GameVault",permalink:"/docs/server-docs/adding-games"},next:{title:"User Management",permalink:"/docs/server-docs/user-management"}},d={},l=[{value:"Applying an Update to a Game",id:"applying-an-update-to-a-game",level:2},{value:"Example",id:"example",level:3},{value:"Changing or Moving a Game",id:"changing-or-moving-a-game",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"updating-games",children:"Updating Games"})}),"\n",(0,t.jsx)(n.h2,{id:"applying-an-update-to-a-game",children:"Applying an Update to a Game"}),"\n",(0,t.jsxs)(n.p,{children:["To update a game, simply delete the existing game file and replace it with a new one in the files directory (by default ",(0,t.jsx)(n.code,{children:"/files"}),")."]}),"\n",(0,t.jsxs)(n.p,{children:["You can freely modify the early access and version flags of your game. As long as the ",(0,t.jsx)(n.strong,{children:"path"})," or ",(0,t.jsx)(n.strong,{children:"the combination of title and release year"})," of the new file matches the old file, GameVault's indexer will recognize it as an update. The same game entity will be restored if needed and updated with the new file's information, while preserving any progress associated with the game."]}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsxs)(n.p,{children:["Let's say you have a very outdated version of the game ",(0,t.jsx)(n.code,{children:"Minecraft (EA) (v1.8b) (2011).zip"})," and you want to update it to the newest version, such as ",(0,t.jsx)(n.code,{children:"Minecraft (v1.20.1) (2011).7z"}),":"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Delete ",(0,t.jsx)(n.code,{children:"Minecraft (EA) (v1.8b) (2011).zip"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Insert ",(0,t.jsx)(n.code,{children:"Minecraft (v1.20.1) (2011).7z"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Wait for the automatic indexing process to detect and register the changes."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If you want to keep multiple versions of the same game, refer to the documentation on ",(0,t.jsx)(n.a,{href:"/docs/server-docs/adding-games#adding-the-same-game-multiple-times",children:"adding the same game multiple times"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"changing-or-moving-a-game",children:"Changing or Moving a Game"}),"\n",(0,t.jsxs)(n.p,{children:["Changing or moving a game is also a breeze. As long as the ",(0,t.jsx)(n.strong,{children:"path"})," or ",(0,t.jsx)(n.strong,{children:"the combination of title and release year"})," of the moved or renamed file matches the old file, GameVault's indexer will recognize it as an update. The same game entity will be updated with the new file's information, while preserving any progress associated with the game."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8358:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>r});var t=a(5271);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4a6974fe.1af309d2.js b/assets/js/4a6974fe.1af309d2.js new file mode 100644 index 000000000..afbc096bb --- /dev/null +++ b/assets/js/4a6974fe.1af309d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6175],{5256:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>h});var o=n(4507),a=n(6070),i=n(8591);const r={title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",authors:["alfagun74"],tags:["April Fools"]},s=void 0,l={authorsImageUrls:[void 0]},h=[];function u(e){const t={img:"img",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,a.jsxs)(t.p,{children:["The moment you've been waiting for is finally here. We've been working hard on it for months and are thrilled to announce that GameVault Client Application is ",(0,a.jsx)(t.strong,{children:"now available on Windows Phone 7"}),", powered by ",(0,a.jsx)(t.strong,{children:"Microsoft Silverlight"}),"!"]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Windows Phone",src:n(6196).A+"",width:"655",height:"1237"})}),"\n",(0,a.jsx)(t.p,{children:"The Current PC-Version of GameVault will be discontinued soon and will no longer be available to download from the Microsoft Store, as the technology is too new and not well supported yet. We needed a battle-tested framework to ensure compatibility, so we decided to switch to Windows Phone 7 and Silverlight. Also, the mobile platform just has massive market share, compared to PC."}),"\n",(0,a.jsx)(t.p,{children:"We understand the excitement and anticipation surrounding this release, and we're just as eager as you are to see how this integration will enhance your experience."}),"\n",(0,a.jsx)(t.p,{children:"With GameVault on your Windows Phone 7 device, you can carry your favorite games with you wherever you go. Whether you're battling fierce foes, exploring vast virtual worlds, or simply passing the time with a quick puzzle game, GameVault ensures that the thrill of gaming is always at your fingertips."}),"\n",(0,a.jsx)(t.p,{children:"Thanks to the seamless integration with Microsoft Silverlight, navigating through your game library has never been smoother or more intuitive. The Metro Live Tiles add a touch of elegance to the user interface, making it a joy to browse through your collection and discover new games."}),"\n",(0,a.jsx)(t.p,{children:'And the best part? This is just the beginning. Our team is already hard at work on further enhancements and features, including the highly anticipated Holodeck edition of GameVault aswell as the new integrated "Bird Feeding Timer" feature, that automatically warns you when your pets are about to starve.'}),"\n",(0,a.jsx)(t.p,{children:"We're incredibly excited to embark on this journey with you and to continue pushing the boundaries of innovation. So what are you waiting for? Head over to the Windows Phone Store and migrate today to start your gaming adventure!"}),"\n",(0,a.jsx)(t.p,{children:"Happy gaming... and April Fools!"})]})}function d(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},6196:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/winphone-023216d8c8a98bec60f56a1be49a2ae5.png"},8591:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>s});var o=n(758);const a={},i=o.createContext(a);function r(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),o.createElement(i.Provider,{value:t},e.children)}},4507:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/04/01/2024-04-01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-01/2024-04-01.md","source":"@site/blog/2024-04-01/2024-04-01.md","title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","description":"Hey Everyone!","date":"2024-04-01T00:00:00.000Z","tags":[{"inline":true,"label":"April Fools","permalink":"/blog/tags/april-fools"}],"readingTime":1.605,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","authors":["alfagun74"],"tags":["April Fools"]},"unlisted":false,"prevItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"},"nextItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"}}')}}]); \ No newline at end of file diff --git a/assets/js/4a6974fe.d796f7ac.js b/assets/js/4a6974fe.d796f7ac.js deleted file mode 100644 index 5c9230b32..000000000 --- a/assets/js/4a6974fe.d796f7ac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6634],{1693:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>h});var o=n(2676),a=n(8358);const i={title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",authors:["alfagun74"],tags:["April Fools"]},r=void 0,s={permalink:"/blog/2024/04/01/2024-04-01/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-01/2024-04-01.md",source:"@site/blog/2024-04-01/2024-04-01.md",title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",description:"Hey Everyone!",date:"2024-04-01T00:00:00.000Z",tags:[{inline:!0,label:"April Fools",permalink:"/blog/tags/april-fools"}],readingTime:1.605,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",authors:["alfagun74"],tags:["April Fools"]},unlisted:!1,prevItem:{title:"GameVault+ out now",permalink:"/blog/2024/04/14/"},nextItem:{title:"Announcing GameVault+ (coming soon)",permalink:"/blog/2024/03/28/"}},l={authorsImageUrls:[void 0]},h=[];function u(e){const t={img:"img",p:"p",strong:"strong",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,o.jsxs)(t.p,{children:["The moment you've been waiting for is finally here. We've been working hard on it for months and are thrilled to announce that GameVault Client Application is ",(0,o.jsx)(t.strong,{children:"now available on Windows Phone 7"}),", powered by ",(0,o.jsx)(t.strong,{children:"Microsoft Silverlight"}),"!"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Windows Phone",src:n(9269).Z+"",width:"655",height:"1237"})}),"\n",(0,o.jsx)(t.p,{children:"The Current PC-Version of GameVault will be discontinued soon and will no longer be available to download from the Microsoft Store, as the technology is too new and not well supported yet. We needed a battle-tested framework to ensure compatibility, so we decided to switch to Windows Phone 7 and Silverlight. Also, the mobile platform just has massive market share, compared to PC."}),"\n",(0,o.jsx)(t.p,{children:"We understand the excitement and anticipation surrounding this release, and we're just as eager as you are to see how this integration will enhance your experience."}),"\n",(0,o.jsx)(t.p,{children:"With GameVault on your Windows Phone 7 device, you can carry your favorite games with you wherever you go. Whether you're battling fierce foes, exploring vast virtual worlds, or simply passing the time with a quick puzzle game, GameVault ensures that the thrill of gaming is always at your fingertips."}),"\n",(0,o.jsx)(t.p,{children:"Thanks to the seamless integration with Microsoft Silverlight, navigating through your game library has never been smoother or more intuitive. The Metro Live Tiles add a touch of elegance to the user interface, making it a joy to browse through your collection and discover new games."}),"\n",(0,o.jsx)(t.p,{children:'And the best part? This is just the beginning. Our team is already hard at work on further enhancements and features, including the highly anticipated Holodeck edition of GameVault aswell as the new integrated "Bird Feeding Timer" feature, that automatically warns you when your pets are about to starve.'}),"\n",(0,o.jsx)(t.p,{children:"We're incredibly excited to embark on this journey with you and to continue pushing the boundaries of innovation. So what are you waiting for? Head over to the Windows Phone Store and migrate today to start your gaming adventure!"}),"\n",(0,o.jsx)(t.p,{children:"Happy gaming... and April Fools!"})]})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},9269:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/winphone-023216d8c8a98bec60f56a1be49a2ae5.png"},8358:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>r});var o=n(5271);const a={},i=o.createContext(a);function r(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4d393b3e.1c91c1a9.js b/assets/js/4d393b3e.1c91c1a9.js new file mode 100644 index 000000000..4d11f0b5d --- /dev/null +++ b/assets/js/4d393b3e.1c91c1a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7624],{6745:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"server-docs/backup-and-restore","title":"Database Backup & Restoration","description":"The Backup and Restoration Mechanisms in GameVault are currently experimental and should not be your primary backup solution. Always maintain your database backups independently and only consider using this as a last resort. In summary, we recommend avoiding this entire process whenever possible, as it can potentially be quite fragile and prone to issues. But i guess something is better than nothing...","source":"@site/docs/server-docs/backup-and-restore.md","sourceDirName":"server-docs","slug":"/server-docs/backup-and-restore","permalink":"/docs/server-docs/backup-and-restore","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/backup-and-restore.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":7.5,"frontMatter":{"sidebar_position":7.5},"sidebar":"docs","previous":{"title":"Provider: IGDB","permalink":"/docs/server-docs/metadata-enrichment/provider-igdb"},"next":{"title":"Media","permalink":"/docs/server-docs/media"}}');var r=a(6070),n=a(8591);const o={sidebar_position:7.5},i="Database Backup & Restoration",d={},c=[{value:"Backup",id:"backup",level:2},{value:"Restoration",id:"restoration",level:2}];function l(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"database-backup--restoration",children:"Database Backup & Restoration"})}),"\n",(0,r.jsx)(t.admonition,{title:"Experimental",type:"warning",children:(0,r.jsxs)(t.p,{children:["The Backup and Restoration Mechanisms in GameVault are currently experimental and should ",(0,r.jsx)(t.strong,{children:"not"})," be your primary backup solution. Always maintain your database backups independently and only consider using this as a last resort. In summary, we recommend avoiding this entire process whenever possible, as it can potentially be quite fragile and prone to issues. But i guess something is better than nothing..."]})}),"\n",(0,r.jsx)(t.admonition,{title:"Security Measurements",type:"note",children:(0,r.jsx)(t.p,{children:"For security resons any database operation outlined below must be additionally authenticated using your database password."})}),"\n",(0,r.jsx)(t.h2,{id:"backup",children:"Backup"}),"\n",(0,r.jsxs)(t.p,{children:["GameVault offers a user-friendly backup system for both supported database systems, Postgres and SQLite. You can trigger and download backups either through the GameVault Client or directly via the ",(0,r.jsx)(t.a,{href:"../advanced-usage/rest-api",children:"API"})," for automation purposes. Each backup is a complete database snapshot, and it's essential to handle these files with care, as they are unencrypted. You can create as many backups as needed."]}),"\n",(0,r.jsx)(t.p,{children:"For SQLite, the GameVault Backup simply duplicates the database file."}),"\n",(0,r.jsx)(t.p,{children:"For Postgres, it utilizes pgdump to create a comprehensive database dump."}),"\n",(0,r.jsx)(t.h2,{id:"restoration",children:"Restoration"}),"\n",(0,r.jsx)(t.p,{children:"Restoring a backup is a straightforward process."}),"\n",(0,r.jsxs)(t.p,{children:["You can trigger the restoration and upload backups using the GameVault Client or via the ",(0,r.jsx)(t.a,{href:"../advanced-usage/rest-api",children:"API"})," for automated procedures. However, before you proceed, there are some critical points to consider:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"We strongly discourage restoring a backup on a different server version. If you must do it, consider downgrading your GameVault server to a lower version, ideally the version of your backup, as higher versions are more likely to cause compatibility issues. If you have no alternative, make sure to back up your current data again before proceeding."}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Never, under any circumstances"}),", attempt to restore a backup from a different database technology (e.g., SQLite to Postgres or vice versa). This will result in a catastrophic failure."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Always monitor the server logs while restoring a backup. If you notice anything unusual or different than a harmless warning, make a copy and securely store the file located at /tmp/gamevault-pre-restore.db on your container/server. This file serves as a backup created just before restoring the uploaded backup. In case of a major failure, GameVault may also perform this pre-restore backup restoration automatically. If you encounter difficulties, attempt to restore from this file. If this doesn't resolve the issue, you may need to explore manual restoration or consider other backup options."}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"The Restoration is not incremental. It hard-deletes everything and hard-restores everything."}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>i});var s=a(758);const r={},n=s.createContext(r);function o(e){const t=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4d393b3e.75bfcbb7.js b/assets/js/4d393b3e.75bfcbb7.js deleted file mode 100644 index 9bddee652..000000000 --- a/assets/js/4d393b3e.75bfcbb7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9155],{2197:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=t(2676),s=t(8358);const n={sidebar_position:7.5},o="Database Backup & Restoration",i={id:"server-docs/backup-and-restore",title:"Database Backup & Restoration",description:"The Backup and Restoration Mechanisms in GameVault are currently experimental and should not be your primary backup solution. Always maintain your database backups independently and only consider using this as a last resort. In summary, we recommend avoiding this entire process whenever possible, as it can potentially be quite fragile and prone to issues. But i guess something is better than nothing...",source:"@site/docs/server-docs/backup-and-restore.md",sourceDirName:"server-docs",slug:"/server-docs/backup-and-restore",permalink:"/docs/server-docs/backup-and-restore",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/backup-and-restore.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:7.5,frontMatter:{sidebar_position:7.5},sidebar:"docs",previous:{title:"Provider: IGDB",permalink:"/docs/server-docs/metadata-enrichment/provider-igdb"},next:{title:"Media",permalink:"/docs/server-docs/media"}},d={},c=[{value:"Backup",id:"backup",level:2},{value:"Restoration",id:"restoration",level:2}];function l(e){const a={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.header,{children:(0,r.jsx)(a.h1,{id:"database-backup--restoration",children:"Database Backup & Restoration"})}),"\n",(0,r.jsx)(a.admonition,{title:"Experimental",type:"warning",children:(0,r.jsxs)(a.p,{children:["The Backup and Restoration Mechanisms in GameVault are currently experimental and should ",(0,r.jsx)(a.strong,{children:"not"})," be your primary backup solution. Always maintain your database backups independently and only consider using this as a last resort. In summary, we recommend avoiding this entire process whenever possible, as it can potentially be quite fragile and prone to issues. But i guess something is better than nothing..."]})}),"\n",(0,r.jsx)(a.admonition,{title:"Security Measurements",type:"note",children:(0,r.jsx)(a.p,{children:"For security resons any database operation outlined below must be additionally authenticated using your database password."})}),"\n",(0,r.jsx)(a.h2,{id:"backup",children:"Backup"}),"\n",(0,r.jsxs)(a.p,{children:["GameVault offers a user-friendly backup system for both supported database systems, Postgres and SQLite. You can trigger and download backups either through the GameVault Client or directly via the ",(0,r.jsx)(a.a,{href:"../advanced-usage/rest-api",children:"API"})," for automation purposes. Each backup is a complete database snapshot, and it's essential to handle these files with care, as they are unencrypted. You can create as many backups as needed."]}),"\n",(0,r.jsx)(a.p,{children:"For SQLite, the GameVault Backup simply duplicates the database file."}),"\n",(0,r.jsx)(a.p,{children:"For Postgres, it utilizes pgdump to create a comprehensive database dump."}),"\n",(0,r.jsx)(a.h2,{id:"restoration",children:"Restoration"}),"\n",(0,r.jsx)(a.p,{children:"Restoring a backup is a straightforward process."}),"\n",(0,r.jsxs)(a.p,{children:["You can trigger the restoration and upload backups using the GameVault Client or via the ",(0,r.jsx)(a.a,{href:"../advanced-usage/rest-api",children:"API"})," for automated procedures. However, before you proceed, there are some critical points to consider:"]}),"\n",(0,r.jsxs)(a.ol,{children:["\n",(0,r.jsxs)(a.li,{children:["\n",(0,r.jsx)(a.p,{children:"We strongly discourage restoring a backup on a different server version. If you must do it, consider downgrading your GameVault server to a lower version, ideally the version of your backup, as higher versions are more likely to cause compatibility issues. If you have no alternative, make sure to back up your current data again before proceeding."}),"\n"]}),"\n",(0,r.jsxs)(a.li,{children:["\n",(0,r.jsxs)(a.p,{children:[(0,r.jsx)(a.strong,{children:"Never, under any circumstances"}),", attempt to restore a backup from a different database technology (e.g., SQLite to Postgres or vice versa). This will result in a catastrophic failure."]}),"\n"]}),"\n",(0,r.jsxs)(a.li,{children:["\n",(0,r.jsx)(a.p,{children:"Always monitor the server logs while restoring a backup. If you notice anything unusual or different than a harmless warning, make a copy and securely store the file located at /tmp/gamevault-pre-restore.db on your container/server. This file serves as a backup created just before restoring the uploaded backup. In case of a major failure, GameVault may also perform this pre-restore backup restoration automatically. If you encounter difficulties, attempt to restore from this file. If this doesn't resolve the issue, you may need to explore manual restoration or consider other backup options."}),"\n"]}),"\n",(0,r.jsxs)(a.li,{children:["\n",(0,r.jsx)(a.p,{children:"The Restoration is not incremental. It hard-deletes everything and hard-restores everything."}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>i,a:()=>o});var r=t(5271);const s={},n=r.createContext(s);function o(e){const a=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(n.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4e01c0f4.ef8b51e7.js b/assets/js/4e01c0f4.c0e367b2.js similarity index 84% rename from assets/js/4e01c0f4.ef8b51e7.js rename to assets/js/4e01c0f4.c0e367b2.js index f9dedd714..4a4189c2b 100644 --- a/assets/js/4e01c0f4.ef8b51e7.js +++ b/assets/js/4e01c0f4.c0e367b2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3198],{4615:a=>{a.exports=JSON.parse('{"tag":{"label":"platform","permalink":"/blog/tags/platform","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/platform","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4308],{2406:a=>{a.exports=JSON.parse('{"tag":{"label":"platform","permalink":"/blog/tags/platform","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/platform","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4efd7f8f.ced76d32.js b/assets/js/4efd7f8f.c9c8f059.js similarity index 85% rename from assets/js/4efd7f8f.ced76d32.js rename to assets/js/4efd7f8f.c9c8f059.js index a689c82bd..4f78d18ad 100644 --- a/assets/js/4efd7f8f.ced76d32.js +++ b/assets/js/4efd7f8f.c9c8f059.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9950],{3665:e=>{e.exports=JSON.parse('{"tag":{"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/exclusive-preview","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5877],{1086:e=>{e.exports=JSON.parse('{"tag":{"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/exclusive-preview","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4f991444.76873c68.js b/assets/js/4f991444.76873c68.js deleted file mode 100644 index 3f4259b7d..000000000 --- a/assets/js/4f991444.76873c68.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1271],{774:a=>{a.exports=JSON.parse('{"tag":{"label":"Software Updates","permalink":"/blog/tags/software-updates","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software-updates","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4f991444.97a7f6f8.js b/assets/js/4f991444.97a7f6f8.js new file mode 100644 index 000000000..43525c5a8 --- /dev/null +++ b/assets/js/4f991444.97a7f6f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3580],{2155:a=>{a.exports=JSON.parse('{"tag":{"label":"Software Updates","permalink":"/blog/tags/software-updates","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software-updates","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4fb3dfba.77e500a8.js b/assets/js/4fb3dfba.77e500a8.js new file mode 100644 index 000000000..c1c430402 --- /dev/null +++ b/assets/js/4fb3dfba.77e500a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8001],{9420:a=>{a.exports=JSON.parse('{"tag":{"label":"backend application migration","permalink":"/blog/tags/backend-application-migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/backend-application-migration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4fb3dfba.c47be8fc.js b/assets/js/4fb3dfba.c47be8fc.js deleted file mode 100644 index 6a0f81120..000000000 --- a/assets/js/4fb3dfba.c47be8fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[428],{6389:a=>{a.exports=JSON.parse('{"tag":{"label":"backend application migration","permalink":"/blog/tags/backend-application-migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/backend-application-migration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/4ff7c2f7.26455918.js b/assets/js/4ff7c2f7.030787b7.js similarity index 84% rename from assets/js/4ff7c2f7.26455918.js rename to assets/js/4ff7c2f7.030787b7.js index 08b8c32ba..4c90a3f0b 100644 --- a/assets/js/4ff7c2f7.26455918.js +++ b/assets/js/4ff7c2f7.030787b7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8565],{7479:a=>{a.exports=JSON.parse('{"tag":{"label":"GameHub","permalink":"/blog/tags/game-hub","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-hub","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5246],{4536:a=>{a.exports=JSON.parse('{"tag":{"label":"GameHub","permalink":"/blog/tags/game-hub","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-hub","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/500e67e3.19f9ac2f.js b/assets/js/500e67e3.d592f3bc.js similarity index 84% rename from assets/js/500e67e3.19f9ac2f.js rename to assets/js/500e67e3.d592f3bc.js index c81d350b5..bb3e0caba 100644 --- a/assets/js/500e67e3.19f9ac2f.js +++ b/assets/js/500e67e3.d592f3bc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5724],{4617:l=>{l.exports=JSON.parse('{"tag":{"label":"poll results","permalink":"/blog/tags/poll-results","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/poll-results","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3360],{4641:l=>{l.exports=JSON.parse('{"tag":{"label":"poll results","permalink":"/blog/tags/poll-results","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/poll-results","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5046667d.88538dd3.js b/assets/js/5046667d.88538dd3.js deleted file mode 100644 index b7761cfbe..000000000 --- a/assets/js/5046667d.88538dd3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4275],{1575:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var s=i(2676),n=i(8358);const o={sidebar_position:8},r="WebSockets",a={id:"server-docs/websockets",title:"WebSockets",description:"GameVault doesn't fully use Websockets yet. Both the client and the server are still lacking a full implementation. Right now, it's just a basic version to begin with on the server. If you're interested in how we're doing with implementing Websockets, you can check out this page on GitHub to see our progress.",source:"@site/docs/server-docs/websockets.md",sourceDirName:"server-docs",slug:"/server-docs/websockets",permalink:"/docs/server-docs/websockets",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/websockets.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:8,frontMatter:{sidebar_position:8},sidebar:"docs",previous:{title:"Media",permalink:"/docs/server-docs/media"},next:{title:"Plugins",permalink:"/docs/server-docs/plugins"}},c={},l=[{value:"Activities",id:"activities",level:2},{value:"Disabling Activities",id:"disabling-activities",level:3},{value:"Security",id:"security",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"websockets",children:"WebSockets"})}),"\n",(0,s.jsx)(t.admonition,{title:"Work in progress",type:"warning",children:(0,s.jsxs)(t.p,{children:["GameVault doesn't fully use Websockets yet. Both the client and the server are still lacking a full implementation. Right now, it's just a basic version to begin with on the server. If you're interested in how we're doing with implementing Websockets, you can check out ",(0,s.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues/205",children:"this page on GitHub"})," to see our progress."]})}),"\n",(0,s.jsxs)(t.p,{children:["In GameVault Backend Version 9.0.0, we introduced an exciting feature \u2013 WebSockets. These WebSockets provide an asynchronous and bidirectional gateway for interactive communication with clients. Our implementation is based on ",(0,s.jsx)(t.a,{href:"https://socket.io/",children:"Socket.io"}),", which itself relies on the WebSocket protocol."]}),"\n",(0,s.jsx)(t.p,{children:"WebSockets enable real-time communication between the server and clients. This means that not only can the server send data to clients when they ask for it, but the server can also initiate conversations with the clients."}),"\n",(0,s.jsx)(t.p,{children:"To use this feature effectively, you need to ensure that Web-Socket Support is enabled on your machine, network, or reverse proxy."}),"\n",(0,s.jsxs)(t.p,{children:["The API is documented via AsyncAPI standard in ",(0,s.jsx)(t.code,{children:"/api/docs/async"}),". However, please note that, at the time of writing, this documentation may not run on Docker due to a bug. If you encounter this issue, you can refer to the source code for manual implementation."]}),"\n",(0,s.jsx)(t.h2,{id:"activities",children:"Activities"}),"\n",(0,s.jsx)(t.p,{children:"Starting from GameVault Backend Version 9.0.0, GameVault allows clients to share their current activities on the server. These activities provide valuable information about what users are doing, making the platform more interactive. Activities can include:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"User 1 is online."}),"\n",(0,s.jsx)(t.li,{children:"User 2 is offline."}),"\n",(0,s.jsx)(t.li,{children:"User 3 is playing Mindustry."}),"\n",(0,s.jsx)(t.li,{children:"User 4 is marked as busy."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"Once a user reports his activity, it will propagate to all other users. Clients have the freedom to report their activities. If they don't, the server will display them as offline by default."}),"\n",(0,s.jsx)(t.h3,{id:"disabling-activities",children:"Disabling Activities"}),"\n",(0,s.jsxs)(t.p,{children:["For server owners who wish to disable activities, it's as simple as setting the ",(0,s.jsx)(t.code,{children:"SERVER_ONLINE_ACTIVITIES_DISABLED"})," environment variable to ",(0,s.jsx)(t.code,{children:"true"}),". Please be aware that, depending on your clients implementation, this might result in everyone appearing as offline all the time."]}),"\n",(0,s.jsx)(t.h2,{id:"security",children:"Security"}),"\n",(0,s.jsxs)(t.p,{children:["Each user is assigned a randomly generated Socket Secret that they can retrieve at ",(0,s.jsx)(t.code,{children:"/api/users/me"}),". This secret must be included in the headers (X-Socket-Secret) of every subsequent Socket.IO Handshake request to the server."]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8358:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>r});var s=i(5271);const n={},o=s.createContext(n);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5046667d.9c2b079b.js b/assets/js/5046667d.9c2b079b.js new file mode 100644 index 000000000..ccaaf387b --- /dev/null +++ b/assets/js/5046667d.9c2b079b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6395],{347:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"server-docs/websockets","title":"WebSockets","description":"GameVault doesn\'t fully use Websockets yet. Both the client and the server are still lacking a full implementation. Right now, it\'s just a basic version to begin with on the server. If you\'re interested in how we\'re doing with implementing Websockets, you can check out this page on GitHub to see our progress.","source":"@site/docs/server-docs/websockets.md","sourceDirName":"server-docs","slug":"/server-docs/websockets","permalink":"/docs/server-docs/websockets","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/websockets.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":8,"frontMatter":{"sidebar_position":8},"sidebar":"docs","previous":{"title":"Media","permalink":"/docs/server-docs/media"},"next":{"title":"Plugins","permalink":"/docs/server-docs/plugins"}}');var n=i(6070),o=i(8591);const r={sidebar_position:8},a="WebSockets",c={},l=[{value:"Activities",id:"activities",level:2},{value:"Disabling Activities",id:"disabling-activities",level:3},{value:"Security",id:"security",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"websockets",children:"WebSockets"})}),"\n",(0,n.jsx)(t.admonition,{title:"Work in progress",type:"warning",children:(0,n.jsxs)(t.p,{children:["GameVault doesn't fully use Websockets yet. Both the client and the server are still lacking a full implementation. Right now, it's just a basic version to begin with on the server. If you're interested in how we're doing with implementing Websockets, you can check out ",(0,n.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues/205",children:"this page on GitHub"})," to see our progress."]})}),"\n",(0,n.jsxs)(t.p,{children:["In GameVault Backend Version 9.0.0, we introduced an exciting feature \u2013 WebSockets. These WebSockets provide an asynchronous and bidirectional gateway for interactive communication with clients. Our implementation is based on ",(0,n.jsx)(t.a,{href:"https://socket.io/",children:"Socket.io"}),", which itself relies on the WebSocket protocol."]}),"\n",(0,n.jsx)(t.p,{children:"WebSockets enable real-time communication between the server and clients. This means that not only can the server send data to clients when they ask for it, but the server can also initiate conversations with the clients."}),"\n",(0,n.jsx)(t.p,{children:"To use this feature effectively, you need to ensure that Web-Socket Support is enabled on your machine, network, or reverse proxy."}),"\n",(0,n.jsxs)(t.p,{children:["The API is documented via AsyncAPI standard in ",(0,n.jsx)(t.code,{children:"/api/docs/async"}),". However, please note that, at the time of writing, this documentation may not run on Docker due to a bug. If you encounter this issue, you can refer to the source code for manual implementation."]}),"\n",(0,n.jsx)(t.h2,{id:"activities",children:"Activities"}),"\n",(0,n.jsx)(t.p,{children:"Starting from GameVault Backend Version 9.0.0, GameVault allows clients to share their current activities on the server. These activities provide valuable information about what users are doing, making the platform more interactive. Activities can include:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"User 1 is online."}),"\n",(0,n.jsx)(t.li,{children:"User 2 is offline."}),"\n",(0,n.jsx)(t.li,{children:"User 3 is playing Mindustry."}),"\n",(0,n.jsx)(t.li,{children:"User 4 is marked as busy."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Once a user reports his activity, it will propagate to all other users. Clients have the freedom to report their activities. If they don't, the server will display them as offline by default."}),"\n",(0,n.jsx)(t.h3,{id:"disabling-activities",children:"Disabling Activities"}),"\n",(0,n.jsxs)(t.p,{children:["For server owners who wish to disable activities, it's as simple as setting the ",(0,n.jsx)(t.code,{children:"SERVER_ONLINE_ACTIVITIES_DISABLED"})," environment variable to ",(0,n.jsx)(t.code,{children:"true"}),". Please be aware that, depending on your clients implementation, this might result in everyone appearing as offline all the time."]}),"\n",(0,n.jsx)(t.h2,{id:"security",children:"Security"}),"\n",(0,n.jsxs)(t.p,{children:["Each user is assigned a randomly generated Socket Secret that they can retrieve at ",(0,n.jsx)(t.code,{children:"/api/users/me"}),". This secret must be included in the headers (X-Socket-Secret) of every subsequent Socket.IO Handshake request to the server."]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8591:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>a});var s=i(758);const n={},o=s.createContext(n);function r(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51e7bf36.1bea7895.js b/assets/js/51e7bf36.1bea7895.js deleted file mode 100644 index 4d5b908fc..000000000 --- a/assets/js/51e7bf36.1bea7895.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7146],{7520:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>r});var n=t(2676),s=t(8358);const o={sidebar_position:4},i="Data Management",c={id:"client-docs/data",title:"Data Management",description:"This page gives you an overview of how GameVault stores and manages its data.",source:"@site/docs/client-docs/data.md",sourceDirName:"client-docs",slug:"/client-docs/data",permalink:"/docs/client-docs/data",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/data.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docs",previous:{title:"Updating the Client",permalink:"/docs/client-docs/updating-client"},next:{title:"GUI Overview",permalink:"/docs/client-docs/gui"}},l={},r=[{value:"Image Cache",id:"image-cache",level:2},{value:"Image Cache Optimization",id:"image-cache-optimization",level:3},{value:"Offline Cache (Progresses)",id:"offline-cache-progresses",level:2},{value:"Offline Cache (Game Metadata)",id:"offline-cache-game-metadata",level:2},{value:"Settings",id:"settings",level:2},{value:"Embedded Browser Settings",id:"embedded-browser-settings",level:2},{value:"Ignore List",id:"ignore-list",level:2},{value:"Crash Logs",id:"crash-logs",level:2},{value:"Themes",id:"themes",level:2}];function d(e){const a={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.header,{children:(0,n.jsx)(a.h1,{id:"data-management",children:"Data Management"})}),"\n",(0,n.jsx)(a.p,{children:"This page gives you an overview of how GameVault stores and manages its data."}),"\n",(0,n.jsxs)(a.p,{children:["When you install the app from the Microsoft Store, all the data it saves (except for the GameVault Root Folder for your Downloads and Installations) can be found under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\"}),". Alternatively, if you did not install the app from the Microsoft Store, you can find the data under: ",(0,n.jsx)(a.code,{children:"%APPDATA%/GameVault"}),"."]}),"\n",(0,n.jsx)(a.admonition,{title:"Don't modify unless you know what you're doing",type:"warning",children:(0,n.jsx)(a.p,{children:"Please be aware that manually altering this data may lead to unwanted issues in GameVault."})}),"\n",(0,n.jsx)(a.h2,{id:"image-cache",children:"Image Cache"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\images"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\images"})]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"GameVault caches all loaded images locally for faster retrieval. They're kept in a specific subfolder with a format like \"ParentID.ImageID,\" where the ParentID could represent the Game ID or User ID. This unique ImageID allows GameVault to detect when an image becomes outdated (e.g., when another user modifies a game's box art). When you request that image again, the cache is immediately updated."}),"\n",(0,n.jsx)(a.h3,{id:"image-cache-optimization",children:"Image Cache Optimization"}),"\n",(0,n.jsx)(a.p,{children:"When you launch the GameVault Client, it performs an image optimization process. This process efficiently adjusts all cached images to match your screen size, leading to faster loading times and reduced storage usage."}),"\n",(0,n.jsx)(a.h2,{id:"offline-cache-progresses",children:"Offline Cache (Progresses)"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\prgs"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\prgs"})]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"Even when your application or your GameVault Server is offline, as long as the GameVault Client is running in the background, it continues to track your playtime. This data is sent to the server the next time you or the server is online."}),"\n",(0,n.jsx)(a.h2,{id:"offline-cache-game-metadata",children:"Offline Cache (Game Metadata)"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\local"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\local"})]}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["After downloading a game, GameVault stores the game's metadata locally ",(0,n.jsx)(a.strong,{children:"once"}),". This allows you to see all game details even when your application or the server is offline. There is currently no way to refresh the cached metadata of a game."]}),"\n",(0,n.jsx)(a.h2,{id:"settings",children:"Settings"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\config\\user"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\config\\user"})]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"All GameVault settings are stored and retrieved in a user file. Sensitive data is encrypted for security."}),"\n",(0,n.jsx)(a.h2,{id:"embedded-browser-settings",children:"Embedded Browser Settings"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\config\\web"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\config\\web"})]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"GameVault's embedded browser settings are stored in the web folder. The embedded browser is used for the GameVault+ login functionality. You can delete this folder if you wish to clear all browser data. This will also log you out of your Phalcode account."}),"\n",(0,n.jsx)(a.h2,{id:"ignore-list",children:"Ignore List"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\ignorelist"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\ignorelist"})]}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["The Ignore List includes commonly encountered false positives of sidecar-executables, such as ",(0,n.jsx)(a.code,{children:"setup.exe"}),", ",(0,n.jsx)(a.code,{children:"UnityCrashHandler.exe"})," or ",(0,n.jsx)(a.code,{children:"uninstall.exe"}),". This list is retrieved from the server if not already present. It's used by the playtime tracker for instance to avoid counting ",(0,n.jsx)(a.code,{children:"setup.exe"}),' as playtime. Furthermore, these executables are hidden in the selection list within the installation tab, ensuring that only game-related executables are shown. You can also edit the Ignore List locally by opening the "ignorelist" file and adding your own entries to be excluded.']}),"\n",(0,n.jsx)(a.h2,{id:"crash-logs",children:"Crash Logs"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\errorlog"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\errorlog"})]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"The Crash Logs are generated when an unhandled error occurs in GameVault. They can be used to debug issues or to provide support."}),"\n",(0,n.jsx)(a.h2,{id:"themes",children:"Themes"}),"\n",(0,n.jsxs)(a.blockquote,{children:["\n",(0,n.jsxs)(a.p,{children:["Located under: ",(0,n.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\themes"})," or ",(0,n.jsx)(a.code,{children:"%APPDATA%\\GameVault\\themes"})]}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["Here you can import your custom themes. To learn more about custom themes, refer to ",(0,n.jsx)(a.a,{href:"/docs/gamevault-plus/themes#custom-themes",children:"Custom Themes Guide"}),"."]})]})}function h(e={}){const{wrapper:a}={...(0,s.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>c,a:()=>i});var n=t(5271);const s={},o=n.createContext(s);function i(e){const a=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51e7bf36.d03c240c.js b/assets/js/51e7bf36.d03c240c.js new file mode 100644 index 000000000..637ad8795 --- /dev/null +++ b/assets/js/51e7bf36.d03c240c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1334],{7458:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>r});const n=JSON.parse('{"id":"client-docs/data","title":"Data Management","description":"This page gives you an overview of how GameVault stores and manages its data.","source":"@site/docs/client-docs/data.md","sourceDirName":"client-docs","slug":"/client-docs/data","permalink":"/docs/client-docs/data","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/data.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4},"sidebar":"docs","previous":{"title":"Updating the Client","permalink":"/docs/client-docs/updating-client"},"next":{"title":"GUI Overview","permalink":"/docs/client-docs/gui"}}');var s=t(6070),o=t(8591);const i={sidebar_position:4},c="Data Management",l={},r=[{value:"Image Cache",id:"image-cache",level:2},{value:"Image Cache Optimization",id:"image-cache-optimization",level:3},{value:"Offline Cache (Progresses)",id:"offline-cache-progresses",level:2},{value:"Offline Cache (Game Metadata)",id:"offline-cache-game-metadata",level:2},{value:"Settings",id:"settings",level:2},{value:"Embedded Browser Settings",id:"embedded-browser-settings",level:2},{value:"Ignore List",id:"ignore-list",level:2},{value:"Crash Logs",id:"crash-logs",level:2},{value:"Themes",id:"themes",level:2}];function d(e){const a={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",strong:"strong",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.header,{children:(0,s.jsx)(a.h1,{id:"data-management",children:"Data Management"})}),"\n",(0,s.jsx)(a.p,{children:"This page gives you an overview of how GameVault stores and manages its data."}),"\n",(0,s.jsxs)(a.p,{children:["When you install the app from the Microsoft Store, all the data it saves (except for the GameVault Root Folder for your Downloads and Installations) can be found under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\"}),". Alternatively, if you did not install the app from the Microsoft Store, you can find the data under: ",(0,s.jsx)(a.code,{children:"%APPDATA%/GameVault"}),"."]}),"\n",(0,s.jsx)(a.admonition,{title:"Don't modify unless you know what you're doing",type:"warning",children:(0,s.jsx)(a.p,{children:"Please be aware that manually altering this data may lead to unwanted issues in GameVault."})}),"\n",(0,s.jsx)(a.h2,{id:"image-cache",children:"Image Cache"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\images"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\images"})]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:"GameVault caches all loaded images locally for faster retrieval. They're kept in a specific subfolder with a format like \"ParentID.ImageID,\" where the ParentID could represent the Game ID or User ID. This unique ImageID allows GameVault to detect when an image becomes outdated (e.g., when another user modifies a game's box art). When you request that image again, the cache is immediately updated."}),"\n",(0,s.jsx)(a.h3,{id:"image-cache-optimization",children:"Image Cache Optimization"}),"\n",(0,s.jsx)(a.p,{children:"When you launch the GameVault Client, it performs an image optimization process. This process efficiently adjusts all cached images to match your screen size, leading to faster loading times and reduced storage usage."}),"\n",(0,s.jsx)(a.h2,{id:"offline-cache-progresses",children:"Offline Cache (Progresses)"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\prgs"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\prgs"})]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:"Even when your application or your GameVault Server is offline, as long as the GameVault Client is running in the background, it continues to track your playtime. This data is sent to the server the next time you or the server is online."}),"\n",(0,s.jsx)(a.h2,{id:"offline-cache-game-metadata",children:"Offline Cache (Game Metadata)"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\local"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\local"})]}),"\n"]}),"\n",(0,s.jsxs)(a.p,{children:["After downloading a game, GameVault stores the game's metadata locally ",(0,s.jsx)(a.strong,{children:"once"}),". This allows you to see all game details even when your application or the server is offline. There is currently no way to refresh the cached metadata of a game."]}),"\n",(0,s.jsx)(a.h2,{id:"settings",children:"Settings"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\config\\user"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\config\\user"})]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:"All GameVault settings are stored and retrieved in a user file. Sensitive data is encrypted for security."}),"\n",(0,s.jsx)(a.h2,{id:"embedded-browser-settings",children:"Embedded Browser Settings"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\config\\web"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\config\\web"})]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:"GameVault's embedded browser settings are stored in the web folder. The embedded browser is used for the GameVault+ login functionality. You can delete this folder if you wish to clear all browser data. This will also log you out of your Phalcode account."}),"\n",(0,s.jsx)(a.h2,{id:"ignore-list",children:"Ignore List"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\cache\\ignorelist"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\cache\\ignorelist"})]}),"\n"]}),"\n",(0,s.jsxs)(a.p,{children:["The Ignore List includes commonly encountered false positives of sidecar-executables, such as ",(0,s.jsx)(a.code,{children:"setup.exe"}),", ",(0,s.jsx)(a.code,{children:"UnityCrashHandler.exe"})," or ",(0,s.jsx)(a.code,{children:"uninstall.exe"}),". This list is retrieved from the server if not already present. It's used by the playtime tracker for instance to avoid counting ",(0,s.jsx)(a.code,{children:"setup.exe"}),' as playtime. Furthermore, these executables are hidden in the selection list within the installation tab, ensuring that only game-related executables are shown. You can also edit the Ignore List locally by opening the "ignorelist" file and adding your own entries to be excluded.']}),"\n",(0,s.jsx)(a.h2,{id:"crash-logs",children:"Crash Logs"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\errorlog"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\errorlog"})]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:"The Crash Logs are generated when an unhandled error occurs in GameVault. They can be used to debug issues or to provide support."}),"\n",(0,s.jsx)(a.h2,{id:"themes",children:"Themes"}),"\n",(0,s.jsxs)(a.blockquote,{children:["\n",(0,s.jsxs)(a.p,{children:["Located under: ",(0,s.jsx)(a.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\themes"})," or ",(0,s.jsx)(a.code,{children:"%APPDATA%\\GameVault\\themes"})]}),"\n"]}),"\n",(0,s.jsxs)(a.p,{children:["Here you can import your custom themes. To learn more about custom themes, refer to ",(0,s.jsx)(a.a,{href:"/docs/gamevault-plus/themes#custom-themes",children:"Custom Themes Guide"}),"."]})]})}function h(e={}){const{wrapper:a}={...(0,o.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8591:(e,a,t)=>{t.d(a,{R:()=>i,x:()=>c});var n=t(758);const s={},o=n.createContext(s);function i(e){const a=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51fa4cf1.d5da5dbf.js b/assets/js/51fa4cf1.47fdc58f.js similarity index 84% rename from assets/js/51fa4cf1.d5da5dbf.js rename to assets/js/51fa4cf1.47fdc58f.js index fef280306..42830d15e 100644 --- a/assets/js/51fa4cf1.d5da5dbf.js +++ b/assets/js/51fa4cf1.47fdc58f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5501],{5318:a=>{a.exports=JSON.parse('{"tag":{"label":"GameStash","permalink":"/blog/tags/game-stash","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-stash","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9734],{3525:a=>{a.exports=JSON.parse('{"tag":{"label":"GameStash","permalink":"/blog/tags/game-stash","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-stash","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/524a34e7.1aab349d.js b/assets/js/524a34e7.b7fed62d.js similarity index 83% rename from assets/js/524a34e7.1aab349d.js rename to assets/js/524a34e7.b7fed62d.js index 439753bcd..850718dd1 100644 --- a/assets/js/524a34e7.1aab349d.js +++ b/assets/js/524a34e7.b7fed62d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6953],{2478:a=>{a.exports=JSON.parse('{"tag":{"label":"Harbor","permalink":"/blog/tags/harbor","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/harbor","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5138],{2265:a=>{a.exports=JSON.parse('{"tag":{"label":"Harbor","permalink":"/blog/tags/harbor","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/harbor","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/534e7ef5.3ac40b2b.js b/assets/js/534e7ef5.3ac40b2b.js deleted file mode 100644 index 75249578f..000000000 --- a/assets/js/534e7ef5.3ac40b2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2834],{2583:t=>{t.exports=JSON.parse('{"tag":{"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/subscription-to-updates-role","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/534e7ef5.db693c3f.js b/assets/js/534e7ef5.db693c3f.js new file mode 100644 index 000000000..c6714efd3 --- /dev/null +++ b/assets/js/534e7ef5.db693c3f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[625],{6287:t=>{t.exports=JSON.parse('{"tag":{"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/subscription-to-updates-role","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/55dfe132.08acfa72.js b/assets/js/55dfe132.08acfa72.js new file mode 100644 index 000000000..e6ca8d9ca --- /dev/null +++ b/assets/js/55dfe132.08acfa72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3314],{9292:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var a=t(8348),s=t(6070),o=t(8591);const r={title:"A Look Back and a Glimpse Forward",authors:["alfagun74"],tags:["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},i=void 0,l={authorsImageUrls:[void 0]},d=[];function c(e){const n={a:"a",img:"img",li:"li",ol:"ol",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Hello,"}),"\n",(0,s.jsxs)(n.p,{children:["It's been a while since we caught up here, but if you've been following the action on ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", you're up to speed. Nevertheless, this blog remains your spot for the key updates and announements."]}),"\n",(0,s.jsx)(n.p,{children:"Let's dive into what's been happening with GameVault since release and what's on the horizon. We've hit version 9 on the backend and 1.7 on the frontend, showcasing our commitment to continuous improvement."}),"\n",(0,s.jsx)(n.p,{children:"Alongside the usual optimizations and bug fixes, we've been paying a lot of attention to your feature requests and implemented a bunch of them."}),"\n",(0,s.jsx)(n.p,{children:"Here's the highlight reel:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Auto Extraction and Installation of Videogames"}),"\n",(0,s.jsx)(n.li,{children:"Uninstalling Games through GameVault"}),"\n",(0,s.jsx)(n.li,{children:"Uploading Images"}),"\n",(0,s.jsx)(n.li,{children:"Support for more Archive Formats"}),"\n",(0,s.jsx)(n.li,{children:"Bandwidth Control Features"}),"\n",(0,s.jsx)(n.li,{children:"Database Backups & Restorations"}),"\n",(0,s.jsx)(n.li,{children:"Crash Reporting"}),"\n",(0,s.jsx)(n.li,{children:"Random Game Finder"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"So, what's cooking now? We asked for your top three desired features recently, and here are the results:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"UI Redesign for the Library and Installations Tab"}),"\n",(0,s.jsx)(n.li,{children:"Support for ROMS and Emulators"}),"\n",(0,s.jsx)(n.li,{children:"Support for extra files like Soundtracks, Mods, etc."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["By the way, if you want to take part in polls like this in the future aswell, make sure to become a council member on ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),"!"]}),"\n",(0,s.jsx)(n.p,{children:"Right now we're knee-deep in redesigning the Library, the heart of our application. Big changes are on the way, waving goodbye to the installations tab and ushering in a sleeker UI for Library, Game View, and Game Settings."}),"\n",(0,s.jsx)(n.p,{children:"Here are some sneak peeks and mockups: (still work in progress):"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Library (Mockup)\n",(0,s.jsx)(n.img,{alt:"Filters",src:t(4672).A+"",width:"1896",height:"1080"}),"\n",(0,s.jsx)(n.img,{alt:"Empty States",src:t(6068).A+"",width:"1896",height:"1080"})]}),"\n",(0,s.jsxs)(n.li,{children:["Library (current implementation)\n",(0,s.jsx)(n.img,{alt:"Library",src:t(8008).A+"",width:"960",height:"520"})]}),"\n",(0,s.jsxs)(n.li,{children:["Game (Mockup)\n",(0,s.jsx)(n.img,{alt:"Game View",src:t(7831).A+"",width:"1896",height:"1080"})]}),"\n",(0,s.jsxs)(n.li,{children:["Game Settings (Mockup)\n",(0,s.jsx)(n.img,{alt:"Game Settings",src:t(7586).A+"",width:"1080",height:"792"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Remember, these are teasers. Anything can look different once it ships. There's a lot of work left, and we're on it. To be technical here: Most of these modern controls require us to rewrite WPF Controls from the core. On the backend, we're not slacking either \u2013 tons of end-to-end tests are being written to ensure our app's reliability."}),"\n",(0,s.jsxs)(n.p,{children:["Excited about the new UI or got something to say? Head over to ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," and spill the beans!"]}),"\n",(0,s.jsx)(n.p,{children:"We're eager to wrap up these tasks and ship the update out to you guys."}),"\n",(0,s.jsxs)(n.p,{children:["We also wanted to mention we've already crossed 2000 GameVault users with a growing engaged ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," community of 350 members!"]}),"\n",(0,s.jsx)(n.p,{children:"And your donations help keeping the lights on, though we're not rolling in dough just yet. Every penny counts, and we're truly grateful. Thanks a lot. \u2764\ufe0f"}),"\n",(0,s.jsx)(n.p,{children:"Help us promote GameVault among fellow self-hosters. Your efforts could inspire a bored developer to join and contribute to our project!"}),"\n",(0,s.jsx)(n.p,{children:"Stay tuned for the UI update \u2013 we'll be back in touch soon."}),"\n",(0,s.jsx)(n.p,{children:"Until then, happy gaming! \ud83c\udfae"})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},6068:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/images/emptystates-cac04f51fc52e209e202e0611b7fc9ce.png"},4672:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/images/filters-f2a63aa5f8026620c96a6af4d668e8de.png"},7831:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/images/game-1a2301146090a980e3af454aa57abb22.png"},8008:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/images/library-23677b063b1eec718776e44519f449fd.png"},7586:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/images/settings-ec331d2e53857decc5abb85f44855896.png"},8591:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>i});var a=t(758);const s={},o=a.createContext(s);function r(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(o.Provider,{value:n},e.children)}},8348:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/11/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-11-20.md","source":"@site/blog/2023-11-20.md","title":"A Look Back and a Glimpse Forward","description":"Hello,","date":"2023-11-20T00:00:00.000Z","tags":[{"inline":true,"label":"Game Development","permalink":"/blog/tags/game-development"},{"inline":true,"label":"Software Updates","permalink":"/blog/tags/software-updates"},{"inline":true,"label":"Gaming Community","permalink":"/blog/tags/gaming-community"},{"inline":true,"label":"UI Redesign","permalink":"/blog/tags/ui-redesign"},{"inline":true,"label":"Development Milestones","permalink":"/blog/tags/development-milestones"},{"inline":true,"label":"Tech Progress","permalink":"/blog/tags/tech-progress"},{"inline":true,"label":"Future Features","permalink":"/blog/tags/future-features"},{"inline":true,"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey"},{"inline":true,"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle"},{"inline":true,"label":"November Update","permalink":"/blog/tags/november-update"}],"readingTime":2.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A Look Back and a Glimpse Forward","authors":["alfagun74"],"tags":["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},"unlisted":false,"prevItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"},"nextItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"}}')}}]); \ No newline at end of file diff --git a/assets/js/55dfe132.39f7a57c.js b/assets/js/55dfe132.39f7a57c.js deleted file mode 100644 index 008a3ce4a..000000000 --- a/assets/js/55dfe132.39f7a57c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5487],{4773:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var a=t(2676),s=t(8358);const o={title:"A Look Back and a Glimpse Forward",authors:["alfagun74"],tags:["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},i=void 0,r={permalink:"/blog/2023/11/20/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-11-20.md",source:"@site/blog/2023-11-20.md",title:"A Look Back and a Glimpse Forward",description:"Hello,",date:"2023-11-20T00:00:00.000Z",tags:[{inline:!0,label:"Game Development",permalink:"/blog/tags/game-development"},{inline:!0,label:"Software Updates",permalink:"/blog/tags/software-updates"},{inline:!0,label:"Gaming Community",permalink:"/blog/tags/gaming-community"},{inline:!0,label:"UI Redesign",permalink:"/blog/tags/ui-redesign"},{inline:!0,label:"Development Milestones",permalink:"/blog/tags/development-milestones"},{inline:!0,label:"Tech Progress",permalink:"/blog/tags/tech-progress"},{inline:!0,label:"Future Features",permalink:"/blog/tags/future-features"},{inline:!0,label:"GameVault Journey",permalink:"/blog/tags/game-vault-journey"},{inline:!0,label:"Coding Chronicle",permalink:"/blog/tags/coding-chronicle"},{inline:!0,label:"November Update",permalink:"/blog/tags/november-update"}],readingTime:2.26,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"A Look Back and a Glimpse Forward",authors:["alfagun74"],tags:["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},unlisted:!1,prevItem:{title:"Join the GameVault Early-Access Program Now!",permalink:"/blog/2023/12/09/"},nextItem:{title:"Please help us prioritize!",permalink:"/blog/2023/07/29/"}},l={authorsImageUrls:[void 0]},d=[];function c(e){const n={a:"a",img:"img",li:"li",ol:"ol",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"Hello,"}),"\n",(0,a.jsxs)(n.p,{children:["It's been a while since we caught up here, but if you've been following the action on ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", you're up to speed. Nevertheless, this blog remains your spot for the key updates and announements."]}),"\n",(0,a.jsx)(n.p,{children:"Let's dive into what's been happening with GameVault since release and what's on the horizon. We've hit version 9 on the backend and 1.7 on the frontend, showcasing our commitment to continuous improvement."}),"\n",(0,a.jsx)(n.p,{children:"Alongside the usual optimizations and bug fixes, we've been paying a lot of attention to your feature requests and implemented a bunch of them."}),"\n",(0,a.jsx)(n.p,{children:"Here's the highlight reel:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Auto Extraction and Installation of Videogames"}),"\n",(0,a.jsx)(n.li,{children:"Uninstalling Games through GameVault"}),"\n",(0,a.jsx)(n.li,{children:"Uploading Images"}),"\n",(0,a.jsx)(n.li,{children:"Support for more Archive Formats"}),"\n",(0,a.jsx)(n.li,{children:"Bandwidth Control Features"}),"\n",(0,a.jsx)(n.li,{children:"Database Backups & Restorations"}),"\n",(0,a.jsx)(n.li,{children:"Crash Reporting"}),"\n",(0,a.jsx)(n.li,{children:"Random Game Finder"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"So, what's cooking now? We asked for your top three desired features recently, and here are the results:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsx)(n.li,{children:"UI Redesign for the Library and Installations Tab"}),"\n",(0,a.jsx)(n.li,{children:"Support for ROMS and Emulators"}),"\n",(0,a.jsx)(n.li,{children:"Support for extra files like Soundtracks, Mods, etc."}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["By the way, if you want to take part in polls like this in the future aswell, make sure to become a council member on ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),"!"]}),"\n",(0,a.jsx)(n.p,{children:"Right now we're knee-deep in redesigning the Library, the heart of our application. Big changes are on the way, waving goodbye to the installations tab and ushering in a sleeker UI for Library, Game View, and Game Settings."}),"\n",(0,a.jsx)(n.p,{children:"Here are some sneak peeks and mockups: (still work in progress):"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["Library (Mockup)\n",(0,a.jsx)(n.img,{alt:"Filters",src:t(9740).Z+"",width:"1896",height:"1080"}),"\n",(0,a.jsx)(n.img,{alt:"Empty States",src:t(709).Z+"",width:"1896",height:"1080"})]}),"\n",(0,a.jsxs)(n.li,{children:["Library (current implementation)\n",(0,a.jsx)(n.img,{alt:"Library",src:t(104).Z+"",width:"960",height:"520"})]}),"\n",(0,a.jsxs)(n.li,{children:["Game (Mockup)\n",(0,a.jsx)(n.img,{alt:"Game View",src:t(2908).Z+"",width:"1896",height:"1080"})]}),"\n",(0,a.jsxs)(n.li,{children:["Game Settings (Mockup)\n",(0,a.jsx)(n.img,{alt:"Game Settings",src:t(1493).Z+"",width:"1080",height:"792"})]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"Remember, these are teasers. Anything can look different once it ships. There's a lot of work left, and we're on it. To be technical here: Most of these modern controls require us to rewrite WPF Controls from the core. On the backend, we're not slacking either \u2013 tons of end-to-end tests are being written to ensure our app's reliability."}),"\n",(0,a.jsxs)(n.p,{children:["Excited about the new UI or got something to say? Head over to ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," and spill the beans!"]}),"\n",(0,a.jsx)(n.p,{children:"We're eager to wrap up these tasks and ship the update out to you guys."}),"\n",(0,a.jsxs)(n.p,{children:["We also wanted to mention we've already crossed 2000 GameVault users with a growing engaged ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," community of 350 members!"]}),"\n",(0,a.jsx)(n.p,{children:"And your donations help keeping the lights on, though we're not rolling in dough just yet. Every penny counts, and we're truly grateful. Thanks a lot. \u2764\ufe0f"}),"\n",(0,a.jsx)(n.p,{children:"Help us promote GameVault among fellow self-hosters. Your efforts could inspire a bored developer to join and contribute to our project!"}),"\n",(0,a.jsx)(n.p,{children:"Stay tuned for the UI update \u2013 we'll be back in touch soon."}),"\n",(0,a.jsx)(n.p,{children:"Until then, happy gaming! \ud83c\udfae"})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},709:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/emptystates-cac04f51fc52e209e202e0611b7fc9ce.png"},9740:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/filters-f2a63aa5f8026620c96a6af4d668e8de.png"},2908:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/game-1a2301146090a980e3af454aa57abb22.png"},104:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/library-23677b063b1eec718776e44519f449fd.png"},1493:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/settings-ec331d2e53857decc5abb85f44855896.png"},8358:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>i});var a=t(5271);const s={},o=a.createContext(s);function i(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/573c7c88.ef50afd2.js b/assets/js/573c7c88.fc7a17f4.js similarity index 85% rename from assets/js/573c7c88.ef50afd2.js rename to assets/js/573c7c88.fc7a17f4.js index 5db4b9b83..75c008d47 100644 --- a/assets/js/573c7c88.ef50afd2.js +++ b/assets/js/573c7c88.fc7a17f4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8846],{6983:e=>{e.exports=JSON.parse('{"tag":{"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/self-hosted-newsletter","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3903],{8626:e=>{e.exports=JSON.parse('{"tag":{"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/self-hosted-newsletter","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/591d17b8.ab276fe7.js b/assets/js/591d17b8.5d3d00ed.js similarity index 86% rename from assets/js/591d17b8.ab276fe7.js rename to assets/js/591d17b8.5d3d00ed.js index 7a463b7b2..8bf380b43 100644 --- a/assets/js/591d17b8.ab276fe7.js +++ b/assets/js/591d17b8.5d3d00ed.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8218],{1880:t=>{t.exports=JSON.parse('{"tag":{"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/microsoft-store-publication","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4028],{4669:t=>{t.exports=JSON.parse('{"tag":{"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/microsoft-store-publication","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5a2f6c5d.09370c3a.js b/assets/js/5a2f6c5d.09370c3a.js deleted file mode 100644 index 7af629ae1..000000000 --- a/assets/js/5a2f6c5d.09370c3a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2158],{6888:t=>{t.exports=JSON.parse('{"tag":{"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/microsoft-store","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5a2f6c5d.19e85d5c.js b/assets/js/5a2f6c5d.19e85d5c.js new file mode 100644 index 000000000..d32d18cea --- /dev/null +++ b/assets/js/5a2f6c5d.19e85d5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[811],{2566:t=>{t.exports=JSON.parse('{"tag":{"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/microsoft-store","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5a8f8fa9.0f14bab8.js b/assets/js/5a8f8fa9.8116c622.js similarity index 85% rename from assets/js/5a8f8fa9.0f14bab8.js rename to assets/js/5a8f8fa9.8116c622.js index 926c449ba..935fbf27a 100644 --- a/assets/js/5a8f8fa9.0f14bab8.js +++ b/assets/js/5a8f8fa9.8116c622.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8346],{7698:a=>{a.exports=JSON.parse('{"tag":{"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/installation-pipeline","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4983],{2067:a=>{a.exports=JSON.parse('{"tag":{"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/installation-pipeline","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/b2ade0e8.9f4e1edb.js b/assets/js/5ac1a9ec.d03e158b.js similarity index 53% rename from assets/js/b2ade0e8.9f4e1edb.js rename to assets/js/5ac1a9ec.d03e158b.js index 840556cfa..31c80dc25 100644 --- a/assets/js/b2ade0e8.9f4e1edb.js +++ b/assets/js/5ac1a9ec.d03e158b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8563],{1579:e=>{e.exports=JSON.parse('{"tag":{"label":"open-source","permalink":"/blog/tags/open-source","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/open-source","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1267],{7790:a=>{a.exports=JSON.parse('{"tag":{"label":"alternative","permalink":"/blog/tags/alternative","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/alternative","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5b1700d1.2b0c805a.js b/assets/js/5b1700d1.2b0c805a.js new file mode 100644 index 000000000..4d1cd5705 --- /dev/null +++ b/assets/js/5b1700d1.2b0c805a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7903],{9642:(A,e,t)=>{t.r(e),t.d(e,{assets:()=>i,contentTitle:()=>c,default:()=>g,frontMatter:()=>r,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"server-docs/setup/truenas-scale-legacy","title":"Using TrueNAS Scale - Legacy","description":"TrueNAS Scale is an open-source, hyper-converged storage platform that combines the reliability of TrueNAS with the versatility of Linux, providing a unified solution for storage, virtualization, and containerization in a single, easy-to-manage system.","source":"@site/docs/server-docs/setup/truenas-scale-legacy.md","sourceDirName":"server-docs/setup","slug":"/server-docs/setup/truenas-scale-legacy","permalink":"/docs/server-docs/setup/truenas-scale-legacy","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/truenas-scale-legacy.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":7,"frontMatter":{"title":"Using TrueNAS Scale - Legacy","sidebar_position":7},"sidebar":"docs","previous":{"title":"Using Synology Container Manager","permalink":"/docs/server-docs/setup/synology-container-manager"},"next":{"title":"Using Native Approach","permalink":"/docs/server-docs/setup/native"}}');var a=t(6070),s=t(8591);const r={title:"Using TrueNAS Scale - Legacy",sidebar_position:7},c=void 0,i={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Log in to your TrueNAS Scale Dashboard",id:"step-1-log-in-to-your-truenas-scale-dashboard",level:2},{value:"Step 2: Navigate to the catalog Page in TrueNas Scale",id:"step-2-navigate-to-the-catalog-page-in-truenas-scale",level:2},{value:"Step 3: Navigate to Apps and Disover Page",id:"step-3-navigate-to-apps-and-disover-page",level:2},{value:"Step 4: Configure and Install gamevault-backend",id:"step-4-configure-and-install-gamevault-backend",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Reading the Logs",id:"reading-the-logs",level:3}];function l(A){const e={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...A.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(e.p,{children:[(0,a.jsx)(e.a,{href:"https://www.truenas.com/truenas-scale/",children:"TrueNAS Scale"})," is an open-source, hyper-converged storage platform that combines the reliability of TrueNAS with the versatility of Linux, providing a unified solution for storage, virtualization, and containerization in a single, easy-to-manage system."]}),"\n",(0,a.jsxs)(e.p,{children:["Setting up a GameVault Server on TrueNAS Scale prior, to version 24.10, is just a click away by using our template from the ",(0,a.jsx)(e.a,{href:"https://truecharts.org/manual/SCALE/guides/getting-started",children:"Truecharts Catalog"}),",\na community based catalog for TrueNAS Scale."]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsxs)(e.strong,{children:["If you are using TrueNAS Scale version 24.10, or newer, please use this documentation: ",(0,a.jsx)(e.a,{href:"/docs/server-docs/setup/truenas-scale",children:"TrueNAS Scale"})]})}),"\n",(0,a.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsx)(e.li,{children:"a running TrueNAS Scale Server (prior to version 24.10)"}),"\n",(0,a.jsxs)(e.li,{children:["add the TrueCharts ",(0,a.jsx)(e.a,{href:"https://truecharts.org/manual/SCALE/guides/getting-started",children:"Catalog"})]}),"\n",(0,a.jsxs)(e.li,{children:["Install the following ",(0,a.jsx)(e.a,{href:"https://truecharts.org/manual/FAQ#operators",children:"operators"})," from TrueCharts; ",(0,a.jsx)(e.strong,{children:"prometheus-operator"})," and ",(0,a.jsx)(e.strong,{children:"cloudnative-pg"}),"."]}),"\n"]}),"\n",(0,a.jsx)(e.h2,{id:"step-1-log-in-to-your-truenas-scale-dashboard",children:"Step 1: Log in to your TrueNAS Scale Dashboard"}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 1",src:t(3927).A+"",width:"1919",height:"943"})}),"\n",(0,a.jsx)(e.h2,{id:"step-2-navigate-to-the-catalog-page-in-truenas-scale",children:"Step 2: Navigate to the catalog Page in TrueNas Scale"}),"\n",(0,a.jsxs)(e.p,{children:["Go to ",(0,a.jsx)(e.strong,{children:"apps"})," -> ",(0,a.jsx)(e.strong,{children:"discover"})," -> ",(0,a.jsx)(e.strong,{children:"catalogs"}),"."]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 2",src:t(3333).A+"",width:"1918",height:"592"})}),"\n",(0,a.jsx)(e.p,{children:"Validate that TrueCharts catalog was added to the server, if not refer back to the Prerequisites section."}),"\n",(0,a.jsx)(e.h2,{id:"step-3-navigate-to-apps-and-disover-page",children:"Step 3: Navigate to Apps and Disover Page"}),"\n",(0,a.jsxs)(e.p,{children:["Go to ",(0,a.jsx)(e.strong,{children:"apps"})," -> ",(0,a.jsx)(e.strong,{children:"discover"})," and search for ",(0,a.jsx)(e.strong,{children:"gamevault-backend"})]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 3",src:t(5691).A+"",width:"1919",height:"587"})}),"\n",(0,a.jsx)(e.h2,{id:"step-4-configure-and-install-gamevault-backend",children:"Step 4: Configure and Install gamevault-backend"}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 4",src:t(3830).A+"",width:"1919",height:"374"})}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 4a",src:t(5415).A+"",width:"1488",height:"752"})}),"\n",(0,a.jsxs)(e.p,{children:["Scroll down to ",(0,a.jsx)(e.strong,{children:"App Configuration"}),"."]}),"\n",(0,a.jsxs)(e.p,{children:["Set your ",(0,a.jsx)(e.code,{children:"Admin User"})," and ",(0,a.jsx)(e.code,{children:"Admin Password"}),"."]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 4b",src:t(4197).A+"",width:"1485",height:"874"})}),"\n",(0,a.jsx)(e.admonition,{type:"note",children:(0,a.jsx)(e.p,{children:"Leave the Logs and Images storage options as PVC."})}),"\n",(0,a.jsxs)(e.p,{children:["Games storage option can be safely set hostpath if not using using any shares or switch to NFS otherwise; please follow the ",(0,a.jsx)(e.a,{href:"https://truecharts.org/manual/SCALE/guides/dataset",children:"Dataset and Share Setup"})," guide."]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Step 4c",src:t(4197).A+"",width:"1485",height:"874"})}),"\n",(0,a.jsxs)(e.p,{children:["Scroll down to ",(0,a.jsx)(e.strong,{children:"Documentation"})," and click install, wait a few minutes and the app should deploy!"]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Installed",src:t(5952).A+"",width:"1919",height:"949"})}),"\n",(0,a.jsx)(e.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,a.jsx)(e.p,{children:"You have now successfully set up your GameVault Server using TrueNAS Scale."}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,a.jsx)(e.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,a.jsx)(e.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,a.jsxs)(e.p,{children:["To stop the server in TrueNAS Scale, you can click on the gamevault-backend app and then edit the app; set the replicas to 0 or use the ",(0,a.jsx)(e.a,{href:"https://truecharts.org/news/stop-all/",children:'"stop-all"'}),' feature. When editing an application, checking the "stop-all" box and saving the changes accomplishes this. If you\'re working with applications based on CNPG (cloudnative-postgres), the same methods apply, ensuring a safe shutdown.']}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"stop-all",src:t(5016).A+"",width:"394",height:"423"})}),"\n",(0,a.jsxs)(e.p,{children:["If you prefer using ",(0,a.jsx)(e.a,{href:"https://github.com/Heavybullets8/heavy_script",children:"Heavyscript"}),", a specialized script for TrueNAS Scale, it offers a secure way to stop apps, including those utilizing CNPG. By default, Heavyscript employs the ",(0,a.jsx)(e.a,{href:"https://truecharts.org/news/stop-all/",children:'"stop-all"'})," function to ensure a graceful shutdown."]}),"\n",(0,a.jsx)(e.p,{children:"Simple commands for heavyscript:"}),"\n",(0,a.jsxs)(e.p,{children:["stop: ",(0,a.jsx)(e.code,{children:"heavyscript app -x gamevault-backend"})]}),"\n",(0,a.jsxs)(e.p,{children:["start: ",(0,a.jsx)(e.code,{children:"heavyscript app -s gamevault-backend"})]}),"\n",(0,a.jsx)(e.p,{children:'Keep in mind that TrueNAS Scale does not support third-party operators. Consequently, relying on the stop button within the TrueNAS Scale GUI, often considered an IX (iXsystems) hack in the Kubernetes space, is not recommended. For a dependable and supported approach, opt for the replica settings, "stop-all" checkbox, or leverage Heavyscript.'}),"\n",(0,a.jsx)(e.h3,{id:"reading-the-logs",children:"Reading the Logs"}),"\n",(0,a.jsx)(e.p,{children:'Navigate to "Apps" and choose the GameVault-backend App you have created.'}),"\n",(0,a.jsx)(e.p,{children:"In workloads, select any of the white boxes with lines icon; thats the logs button."}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"gamevault-workloads-logs-1",src:t(3178).A+"",width:"422",height:"809"})}),"\n",(0,a.jsx)(e.p,{children:"You have to select the correct main pod and container"}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"gamevault-workloads-logs-2",src:t(2161).A+"",width:"598",height:"352"})}),"\n",(0,a.jsx)(e.p,{children:"Once you selected the main pod and container pod; you should see the logs for the app"}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"gamevault-workloads-logs-3",src:t(5163).A+"",width:"1881",height:"235"})}),"\n",(0,a.jsx)(e.p,{children:"You can then download the logs, but you might have to reselect the correct pods again when downloading the logs."}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"gamevault-workloads-logs-4",src:t(9063).A+"",width:"588",height:"421"})})]})}function g(A={}){const{wrapper:e}={...(0,s.R)(),...A.components};return e?(0,a.jsx)(e,{...A,children:(0,a.jsx)(l,{...A})}):l(A)}},5016:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/gamevault-stop-all-1f3a1e720ade3ecba89c0d63e6ee9bc1.png"},3178:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/gamevault-workloads-logs-1-0a2a9337c9356c4acd287492e815ee01.png"},2161:(A,e,t)=>{t.d(e,{A:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlYAAAFgCAIAAAD2DKBlAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAkj0lEQVR42u3df3xT9aHw8b72vO7r2e697tl2HC0gaYsIsW5lSOp1ckXGAN3lutU7uqowFn0CVYfuoeMGEZRgAW2rhRGNivgDmfxKFAoWehUC+upaAzRFSEtLE1rSAuWHQKGUkrY5zx9f/HpISlfW8iPp5/3qH+3JycnJSc2H7/ec1Jh+0SVpRMKIyYOv6C6J+ltuG6brP6Bfv379BsT3Hzxcl5h0S7/+/RKTBujvjh98p27wcF38oP7xg/oPvlM3IL5/v/79bk0ecOsdAwYk9B98py5+UP9+/fol3j5g0M90A+L7Dxo6IDFpwC3x/UJuSron4Zd/Sho2/lb93fE//UXiL56+fdj4W/v1v4L9HDF5cNKIhAh6LZ599tnf/e53/XCtjBkzJjs7e9HlZWdnjxkzplv/fXVEuRK8TNdO/0T5bewv5sU8+Ejk7PoD/+eRF3446Fo8UkwUvhFkJg28Y8CNtldD7oofk5l07+NDUn47aIRx8C//lHT7z+O7fveBdwwYk5kUWS8ECbzGBg8ePHr06DGXN3r06MGDB3fnIUhgBOkzbt73xv4mrn+/frc+ctPEl//l3nti/vByZH8Zsy/zlRNjzIl5LLeDr8c7/Hrl269r+ZL0vSaG3j/w7odv63uD6de/75AU3fDfDBr+61uT/j1BN6j/Fd397odvG3r/wL7AddX9BHIMr52E8T/8teV//eGlmN/P/+f7f3sj7+l1/IdCTOSmrhMjpw75yaiEqPlN/smohJFTh/BfNEggepWISeCNduAG3nHL2BlJQ/5NFwW/BEP+TTd2RtLAO27hvwdcd7d3hAQicosYEzXZCzF4uG7sjKQ77ovsseAd9yWMnZE0eLiO336QQKDHcxiawIEDBw4ZMkQPAEAkGzJkyMCBA68ggQMHDuSoAQCiRucVvCSBjP8AAFE2FuxqAjlYAIAoQwIBACTw8gns27cvRwoAEGU6vIL05l/nfHf0L2K0n3DgSAEAoi+B4RX8NoHykxYcKQBAVCYwpIIXE6j9sCFHCgAQZW7+z4XfHTXqYgVT/hzzuydi+/W7+cFsEggAiHLK+AUygX1TMr9J4MskEADQGxJ4XwcJ/AUJBAD02gQmanCkAADRnEDD9Ji0jNi+fRkFAgCiX5/75sRMmNKnX9++A375o19ndZzAuLg4jhQAIMrEDXjgB6lZ35k0/zsTZ3//gWdj0qbG9u17838u/DaBcXFxJBAAEIUJjIuLi4vr8P87SAIBANEs5tF5MRNfjJmUFTNpfsyk+TG/XxAzeeHFL9k/EggAiNZRYIcDQRIIAOitCYzT4EgBAKI1geEVJIEAABJIAgEAUZ3AkAqSQAAACSSBAIBoT6C2giQQANDrExgbG8uRAgBEmdjYWBIIACCBl1SQBAIAekcCbzf979Q/9AlPYGxsLAkEAERlAmNjY+PidMqYOf9y1+1x1zGBDodDVVVVVR0OR9Qfd7PZ3NTUpKqq1+vltxAArmcC+6be9PAzP7olLi7u3h/817x/HvfUdyfO7/kEjho1Kj8///Tp08FgUFXVc+fOFRcXm0wmEggAuF4JjDU8/U9jHoyLu5jA7zw09ebBhhjZvx5J4Pjx4/ft2yfip3X69GmLxUICAQDXI4GGHzz43PcvToLe+4P/mvevhviLE6E9mMBNmzYFg8FgMOjz+V566aXZs2d//vnnbW1tqqpWVVU98MADJBAAcK0TmDjxew89/uO4bxN4051xPZxAo9HY0NCgquqJEyemTZsmFg4fPryiokJV1bNnz86aNUsmcOvWrbW1tcFgsK2tbe/evZMnT5brr1+/vrGxUaT0+PHj77zzjvZR3nnnnePHj4tbGxsb169fP3z4cHHT5MmTd+/e3dLSoqpqW1tbXV3dyy+/LO9oMpn27t174cIFVVVbWlqKi4vT09PDn4XX61VV9eDBg3v37m1rawsGg0ePHtVuJ+RRqqqqzGazvPXll18WuxcIBHbv3n3u3DkSCADXN4E33zvjez9PibuqCczNzT1//ryqqm63W7t8zZo1lZWVHo9n3rx5MoEhSkpKRP+Ki4tD5lHb2trWr18vNrV+/XoxppSCwWBxcfHw4cPT09Pr6urEkubmZrFaU1NTVlaWXq+fOnXqkSNHQh60srJy/PjxHSYwRGNj4+zZsy+3nTNnzohpXovFcubMmfC7k0AAuH4JHHfTb5/5QXzs1U2gzWYLBAKyZx2SCdy/f//UqVMXLFhw8uRJVVWPHDkyceLEV199VUTU5/NNmzZt3rx5R48eFQWaMWNGZmbm6dOnVVU9evTovHnzpk2b5vP5xJAuLy9vyZIlFy5caG9vt9vter0+Ly9PDNSKior0ev2uXbtUVQ0EAna7PS0tbcuWLW1tbe3t7R9++GGHCWxpaVmzZo1cUz4pp9MpRq5btmxJS0tbs2aNeJSKiorhw4eLR2lraysoKEhLSysoKBD3JYEAcN0S+JPH/+n+hzQfkL+YwLi4uJ5M4Jo1a8QArisJlOcCRXLOnDkzY8aMrVu3ilDZbDa5fjAYFK368MMP29vbg8GgvK+M7tatW0UCVVUtKyubPHnyqFGjMjMzzWaz0WiUM7Q+n0/Mmj755JMnTpzocFfF/jQ0NBiNRr1mdre+vv7ZZ5+tr6/X3jp8+PDq6mpxvc+SJUvEADH8viQQAK6XH47975t+OqDDvxETE6txLUeBIQlsamoym81ut1t+H7LNTZs2bdq0KSSQ8noTt9s9fvz4yspKOfd47tw5t9sttiNX68oUZUgCtUsWL14swqm9V0lJiaqqzc3N69atE7Og8lYSCADXXcyEZ2PSnov53ZyY9DkxD78Q88jcmEfnxTw6L2biiz2ZwMudC8zNzc3Pz//oo4/++Mc/Xr0E6vX6UaNG2e12cTWKeJTm5ubc3Fy52oULF5outWfPnp5KoMPhEPO0JBAAbhzazF3FUeDUqVNFIU6cODF16lSxUF4R2tzcnJWV1XkCxUSoOLcnR40hE6Ht7e2rVq0KCeTWrVuNRqPZbM7MzBw1atT48ePtdrs4S/fll1/Kac+DBw/K61/EauHPIiSBjz/++LFjx8R9n3nmGTEReujQIXE1aYcTofJWEggAvSWB+m+uFgkGg5WVleJzgSUlJeKSkAMHDnT4uUBtAuU1LB1eDjNjxozGxsbLXQ4jx4hvvfWWXq+XK4sBorhQJRgMlpaWTp48eerUqaWlpUeOHJGpDkmguBxm/Pjxn332mdj/7du36/X67du3iwteuBwGAEjgJUJOyHXlr8NoE9idD0XIjytoPxTR0tLy2muv6S/zYQZ5a3gC+VAEAPSiBPbp06dHHkz8jVDx2XZxWcquXbs6+Ruh2gTqu/fReJPJpP3Qen19/SuvvCLvKD7SLs5Wilu1H3gPSeCJEyd27doVCAS689H44uLigwcPkkAAuI769Olz7RIY6cIvhwEAkEASCAAggSQQAEACSSAAICISGFJBEggAIIEkEABAAgEAIIEAAJBAAABIIAAAJBAAABIIAAAJBADgRk9gfHx8fHy8TqfT6XQcKQAAo0AAAEggAAAkEAAAEggAAAkEAIAEAgBAAgEAIIEAAJBAAABIIAAAJBAAABIIAAAJBACABAIAQAIBACCBAACQQAAASCAAACQQAEACSSAAgASSQAAACSSBAIBekMDbRj/69Kx5gnnKr4bExcXFTfrvl0ggACCaDerT54Gpsy3PTvmPn8bG/vQ/pj0///knfkUCAQDRb0yfPkl3jfj5nbeJ2P3qiefn//lREggA6BUJjL3rN1P+fHEidP78+SQQANBLEvizR/70wpxp6aN+yigQANC7EniPccYLszIevHNw7E9GpU2bwygQANBbEthn0Dhj5mzLvHnz5s2ZPu3/PT/f/JjhOibQbDZ7vV6j0djhrU6n02az8bIBALrv2n0u0GazBQIBVVVVVfV6vVeaQKPR2NDQIO5eUlLCKwcAiKQEOp1OETOv12s2m0tKSlRVDQQCYmAnfmxoaBAJ9Hq94keZQ4fD4ff7/X4/A0EAQAQncPXq1aWlpXLYl5+f7/f7jUajw+FoaGhYunSpuNXhcDgcDl4nAEBkJ1A7ERpSxC1btogf5USoGAU2NTWZzWZeJwBANIwC5Y/l5eXho0Dx49KlSwsKChgFAgCiMIH6b07+hZwLFOf/li5d6na7GQUCAKIhgQAAkEAAAEggAAAkEAAAEggAAAkEAIAEAgBAAgEAuJoJjI+P132DIwUAYBT4j0hOTjYYDCkAAHSbwWBITk6OmAQaDIbExEQdAADdlpiYaDAYIiaBKSkpvGYAgJ6SkpJCAgEAJJAEAgBIIAkEAJBAEggAIIEkEABAAkkgAIAEkkAAAAnsrQk0mUxOpzM1NVWn0xUWFloslpAVLBZLYWHhlW62w011ndPptFqt4Qt9GlarNTU11eVyVVVVWSwWq9Uqb3K5XOIZXY7FYikqKkpNTQ3fpvaAdPJ07HZ7+B52/oiXO4xWq9Vut4cstNvt4QsBIDoTaLfb/+4bdy9PYH5+vslk0ul0qampRUVFFovFZDK5XC6x0Gq1dr1JMoEdbpMEAiCB1yKBcuwi+ieGNXJEIt46nU6nWCjeFn0+n8fjEW/cFoulqqpKLFm4cKHL5RL3km/oYn2fz+d0OrVv/fJNXL7jy/FQyDu7dgfERsJ3UjtEE0tEM8Sa4l5yBfHOHr5ZuY7H45FPpMMEWq1Wsc/i7mIU2GGTQvZKHq6ioqKQBIptyn8TFBUVaUeThYWFGzZskI8ljt6GDRvE1i53ELTHUKzpcrmWLVsmvhfPtKCgQPsCiderqqqqqKhIHCjx0PJxAUSTtLS0zZeRlpYW5QmUoZLjnpycHPGjLJPFYvF4PGJ04vF4xNuiaKHolmxhYWGhfB8XP5pMprfffls7jukkgdqdCXn7FjsgdtJut4fvpLYfYlgmHk4O5rQDHbkn8nm53W4xkyk34vF4Ohljyc1qR4F2uz2kQCF7tXDhQvkEw8fc2m3KRxfbFLfKA+t2u00mk9xCh/sv90r7bx1Z+pBxnvxGvjqi7mKhfGgA0VpBr9erPSPj9Xo771/UJlC8/2rHhXICTbuyKIocW8j1Fy5cKJokh0SyCmIY0ZUEhoyutDN44n08fCfD5y0LCwuLiopChnfaU27azYb0Uh4NOUTWNkD7FMITqK1UyF5p76j9PnybciJULpcTodrhdcjehjycPEpiyB6SQO2P4S3Uft/NKWUAkVXBrvQveiZCZcbkPJh449OOAjtJoPZ9XOYkJydHhEq7QndGgSEJDN/J8ASK1eTy8BW6ksAOj5i2Ex2Ot+QT6XoCQ7bZIwkMn/GWzQs53UgCAYgKdrF/0ZNAeS4q5I1Pvvl2ksCQJeId1mq1FhYW5ufnh0yshV8/IsedfzeBshayfyE7KR9dzs2KN275cNoVxKOEJ1C7TofnAsObJ3/U3kWOAkP2SjsRarVa5UTo5bYZMhEasnHtvwNCJkK1E9ThCQw/zuHHUx5qEgj0qgp2sX/RMxFaWFgopwe1c4wul0tcENFJAnWXXg4j3nNDTqSJGciqqqoNGzaIN315gUxZWZmcetVesRI+XCsrK9MOVcN3UneZy2HE+7vYt/DLYUISqN3by50LlE0Kz5XcK+2VI5e7HMbj8WhHw+HblFevyDF0yMbtdntZWVnn1wSFD/fFGT75iss50pDLYcSrQwIBRHMCtRnocOgAAEDUjgLlpwvk8AgAgOhPIAAAJBAAABIIAAAJBACABAIAQAIBACSQBAIASOANnUCDwZCYmMhrBgDovsTERIPBEDEJTE5ONhgMKQAAdJvBYEhOTo6YBAIAcKMhgQAAEkgCAQAkkAQCAEggCQQAkEAAAEggAACRTn7QMF4jISEhISGBBAIAGAWSQAAACQQAgAQCAEACAQAggQAAkEAAAEggAAARlMD4+Hj5sUGOFACAUSAAACQQAAASCAAACQQAgAQCAEACAQAggQAAkEAAAEggAAAkEAAAEggAAAkEAIAEAgBAAgEAIIEAAJBAAACiLoElJSUOh6M7WzAajW6322g08vIDAAm8RgksKSlRVVVV1a40zGw2l5aW9vgTttlsgUBAVdVAIGCz2fgNAAASeNUTaLPZ/H6/GHuVl5fbbDaHw6EtYmlpaUNDg6qqJSUlRqNRfO/1es1mc1NTk/her9c7HA6Hw2Gz2bxebyAQaGpqMpvNcv2Ghgaj0ShubWpqys/Pl9uRe+L1et1ut9wZAAAJvLoJ1E5gGo3Gt956S8xGGo1G0Tmv1+twOMQ3ImPl5eV6vb6goMBsNotGms1mmUDRMLFZufGQW202m9Pp1Ov1TqeTMR8A4PonUH/pPKcYFIrCyRN1MoFysCgGfDJyom3iRznFKgaR8taQ0SGvNwDgOiRQJk2v13u93h07dojRnhwFXi6BIpDho8CQBIq+ii3IW2022/LlyxkFAgCuZwL1YZfDhJ8LDElgIBAQbROrnTp1SvwYnkA52hNbk7eazWa/388oEABwnRMIAAAJBACABAIAQAIBACCBAACQQAAASCAAACQQAAASCADADZvA5ORkg8GQAgBAtxkMhuTk5IhJoMFgSExM1AEA0G2JiYkGgyFiEpiSksJrBgDoKSkpKSQQAEACSSAAgASSQAAACSSBAAAS2LEfXupHGiQQAEACSSAAgARGXwJNJpPT6UxNTdXpdIWFhRaLJWQFi8VSWFh4pZvtcFNd53Q6rVYrv+UA0CsSaLfbXS6XSBEJJIEAcD0TGB8fLx/s6iXQarX6fD6fzyf6l5qa6nK5xBLRAIvF4nQ6xUK73W63230+n8fjMZlM4taqqiqxZOHChS6XS9wrNTW1qKjIYrGI9X0+n9PpFOsXFRWJ4NntdqvVKhPodDq1j6tNoNwBsZHwnRTR0i4RCRRrinvJFex2e4eblet4PB75RAAA0TkKlKGS456cnBzxoyyTxWLxeDwWi8VkMnk8HtEP0ULRLdnCwsJCq9UqU1dYWGgymd5++23tsKyTBGp3JiSBYgfETtrt9vCdlI9rMplcLpfJZBIPJwdzVqtV7Ll2T+TzcrvdFotFuxGPx0MCAUS9tLS0zZeRlpbW6xIo3v2140I5D6ldWRRFDgHl+gsXLhRNEnnTjr2qqqq6mEA5yJN3kROholLhOxk+b1lYWFhUVBQyvJOsVqt2syG9ZCIUQK+qoNfr1b5Der3ezvuni5rPBcqMiVqI4V3IKLCTBMqeaduTk5MjQqVdoTujwJAEhu9keLHEanJ5+AokEADCK9iV/kVPAvPz88VMpiDrIlvVSQJDloiIWq3WwsLC/Px87UbkmnKiUjvu/LsJlNWU/QvZSfnocm5WVE0+nHYF8SjhCdSuw7lAAL2wgl3sX5QkMDU1tbCwUA5+tXOMLperqKhIDPUul0DdpZfDiLCFnEgTM5BVVVUbNmwQk5byApmysjI59aq9YiV8uFZWVqYdqobvpO4yl8OIqIt9C78cJiSB2r3lXCCAXljBLvYvShKozYD22hYAAKJ/FCg/XSCHRwAARH8CAQAggQAAkEAAAEggAAAkEAAAEggAIIEkEABAAkkgAIAE3ngJNBgMiYmJvGYAgO5LTEw0GAwRk8Dk5GSDwZACAEC3GQyG5OTkiEkgAAA3GhIIACCBJBAAQAJJIACABJJAAAAJBACABAIAQAIBACCBAACQQAAASCAAACQQAAASCAAACQQAgAQCAEACAQAggQAAkEAAAEggAAAkEAAAEggAAAkEAIAEAgBAAgEAIIEAABJIAgEAJFCTwPj4eN03OFIAAEaBAACQQAAASCAAACQQAAAS2DVms9nr9RqNxtLSUrPZ3OE6JSUlDofjH9t4aWkprzQA4Pok0Gg0NjQ0qN9oamrqMHXaBBqNRq/Xe7kidpHD4ej8EQEAJPBajAK1VSspKVFVNRAI2Gw2o9HodrtDRoEhCXQ4HA6Hw2azeb3eQCAgkibL2tDQYDQabTZbIBBQVVWOF41Go9/vd7vdXq+XFxsAcP0TaDabCwoK9Hq9zWZzOp1XlEC/3280GsW8qJwdFbc6nU5tUHl1AQA3XAK186IlJSVXlECn0yl/FENJuR05CiwpKeGlBQB0Tv75l3iNhISEhISEq5hAm81WXl7+j40CQxIoRoEiqwUFBeIbRoEAgBt9FNjU1HTy5Mm33npLRMvr9cqTdtqRotfr7TCB2nUcDsfy5cubmpoYBQIAbrgEAgBAAgEAIIEAAJBAAABIIAAAJBAAABIIAAAJBACABAIAcMMmMDk52WAwpAAA0G0GgyE5OTliEmgwGBITE3UAAHRbYmKiwWCImASmpKTwmgEAekpKSgoJBACQQBIIACCBJBAAQAJJIACABJJAAMANKSkpaezYsffff//YsWOTkpJIIAAg+g0aNCgjIyM3N3fRN3JzczMyMgYNGkQCAQDR3L/p06fn5eUtulReXt706dM7r2CUJNBqtfq+YbfbdTqdyWTyeDw+n8/lcqWmpna4BAAQ6SZNmvTqq6/m5eW9+OKLIoTy+1dffXXSpEnRn0C73e50OrVLnE6n3W5PTU11uVxWq7XDJQCASB8CzpkzZ9GiRTk5OQ8//HBGRsYrr7ySkZHx8MMP5+TkLFq0aM6cOZ0MBKMkgSJv8kcx4BOdE3UMX8KvDgBEuhEjRmRlZYmZz+zs7PT09HHjxqWnp2dnZ4uFWVlZI0aMiOYEyhlOn8/n8XhMJpPJZHK73RaLRQTP5XItXLgwZAlzoQAQTQnMy8ubMmXK0KFDp0yZIk8NRn8CtS4XPBIIANFn6NChc+fOFf3LyMhIT0/PyspKT0/PyMgQFZw7d+7QoUN7SwKtVqvH43nttdeYCAWA3uCJJ57Iy8vLzc19+umnxfxndnb2008/nZubm5eX98QTT3Ry3yiZCHW5XCaTSafTOZ1OkTcuhwGA3mDYsGGzZ89e1JHZs2cPGzYsyhOo03woQpwL1GlOEMoBX/gSAEAUuOeee2bNmqX9aGBeXt6sWbPuueeezu/IR+MBANFg3LhxTz755KxZs5588slx48Z15S4kEADQS5FAAAAJJIEAABJIAgEAJLC7CYyPj5cPRgIBAIwCSSAAgASSQAAACSSBAAAS2AGDwZCYmMhrBgDovsTERIPBEDEJTE5ONhgMKQAAdJvBYEhOTo6YBAIAcKMhgQAAEkgCAQAkkAQCAEggCQQAkEAAAEggAAAkEAAAEggAvUnM6+UR+tXh05kQaUggAJBAEkgCAYAEkkASCAAkkASSQAAggSSQBAIACSSBJBAASCAJJIEAQAJJIAkEABJIAkkgAJBAEkgCAYAEkkAAwBUm8G7HgelFDU9sP3zL8v0xr5cnrfQuqzi1an/jvR/XRGgCX3jhhTfeeGPBggUTJ068GmGbO3fu5s2bV69enZGRQQIBICITeMvy/e9UnDrX2q6qqqqqZwPt7+47lVZYV3Gypb6p9eFP6yIugWazedu2bfX19YcPHz58+HBlZeXbb7/d4wlcvHjx/v37S0pKMjMzSSAARGQCX9x57GygvfFC+6aDZ+3exiPnWs8G2v9adTpCE/jYY49t3Lixrq5u3759BQUFW7ZsqampqaioyMnJIYEAQAK//Upa6d1+6Nz5tuBre7++aem+mNfL//y3Bru38XnXsYqTLWcC7b7GC82twcpTF6YXNcS8Xn7vxzWFB8+eCbS3BdXaM4H5u47ftHRfhwsf/bT+y4bm5tbgoabWFVWn73YcGLii+r19p441t7UF1WPNbcsqTg1cUd3jCbRYLHv27Kmurl6yZIko4sqVK9etWzd37tzVq1eXl5f7/f49e/YsW7Zs4sSJy5Yt2717986dO6urq30+3+bNm6dPnz5x4sT333/f4/HU1dVVVVUVFBRkZmbm5ubu2LHD7/f7/X6Xy5WdnU0CASCyEzh6fe2+ky1Hm1v/r/OQdvmo9bUVJ1uCquprvOA/G1BVtfxkS/r/1H3sO9MWVE+1tPkaL7S2B481t80qORq+MLfsxO7j5wPtwcpTF46caz3fFlyy5+vFX33d3Bo8fr5tz4mW823Bs4H2eTuP9XgCFy9eXF1dvWvXrpkzZ2qXL1u27MCBA/v37y8tLa2pqamsrMzNzV21apXf76+pqdm1a1dtba3f71+5cuWiRYuqqqpqampcLldlZWVdXd22bdt27dpVV1fndrsrKioOHz5cXFy8YsUKEggAEZzA8Z8cPNAYOHKu9Q9bOkjgoabWSZ/Vj15fW3Gy5fC51tyyE9WnLxxqav39lvo+71b9ter0+bbg1vomX2MHC2vOBOrOBiZ9Vj/i45o//61h3IaDzvqmxgvtlh3Hblq6b/FXX59rbf+k9qy4+qYHE2iz2Q4cOLBjx44ZM2Zolz/11FNvvvnmc889ZzKZxOzoe++9t2rVqtra2oKCApPJtHr16tra2k8//XTjxo21tbUbN2587LHHsrOzCwoKNm/e7PV6i4uLMzMzn3vuudLS0v3792/atIkEAkAEJ3Dshtrq0xeONbd1OAoU5wLvdhxwHz9/tLn1/cpTDedaK062jFpfG/N6ebb7xLnW9r1ftxw/3xay8PND5zYdPNvaHlRV9UJ78PND5zKLGr46cV691JcNzcmrfT2bQKvV6vV6w0eBs2fPdjqd+/fvP3To0OHDh2tra5cvXy4S+Mknnzz22GPvv/9+TU3N9u3bt2/fXltbu2rVKnnfFStWHDx48LBGTU3Ntm3bSCAARHAC71zr+7Kh+Wygfe6Oi3OST35+2OFtfHHnsfAELi0/Wd/Uuv/0hbEbamNeL1+0++tzre27jp0/ci50YX7NmZ+t8c0sPrr54NnaM4HW9uD/+M+WHT9/NtC+cv/pV3efWPzV1294Tk774kifd6t6NoELFiyoqKioqKhYsGDBhAkTJk6cuHz58o0bN27fvt3v9+/cudPhcHz55Zc1NTUdJnDbtm1btmypra1du3atOJU4c+bMDz74oKamZufOnStXrvzrX/+6du3aFStWrF69mgQCQAQn8Kal+17fe7KlLXigMfCC61jWzuO1ZwItbcF1B85UnroQksCsncf/duRcc2twTXXjrJKj5SdbmluDyytPhy/cWHNm17Hz+TVnxn9y8A3PSRHFDTVnLrQHt9Q1Pfpp/Xv7Th0/37Zkz8VrcHowgU899ZTT6ayvry8uLl6yZInD4fB6vQcOHNi7d6/f71+3bt0LL7xQUlLi9/s3btxYUFAQksBPP/107dq1tbW1ZWVlNptt3bp1Xq93x44d+/fvr6ysfP/991955RW3271z50673V5dXf3VV1+99tprnX/0kAQCwI2YQPGheGd9U3vw4uTkhfbgJ7Vnn9h+OHwUOGXb4ZnFR0+2tMmZzJKG5hEf14QvnLrt8Gd1TW3fbLO+qXXqtsOPflp/oDEgVzvQGPj9lvqr8bnAl156qaysTE5a+ny+tWvXfvjhh16vVyw5cOCA3++vrKz84osvwhOYlZVVXFws715dXf3BBx/k5+fX1dWJJSKfixcvLi8vP3z4cFFR0TPPPEMCASDyEhjzevngD6tzy058Vte0prrRuPWQ+Lz89KKGWSVHk1Z6+7xb9fQXR+a4jt651hfzevnvt9R/5GvcWt/0l6++lmfywhf2ebdq2hdH1nob3y4/JeZIxanH5ZWnNx08u7D0eOdnAbv512Fmzpz58ccfb9u27aOPPnr++efFwqysrPz8/LVr186cOfPFF1984403/vKXv7z33ntiynT27Nnvvvtudnb2hAkTpk+fvmrVqq1bt65Zs+a5554TM6JvvvnmZ599tmHDBrHOhAkTsrOzP/jgg0WLFjEKBIBITSB/I5S/EQoAJJAEkkAAIIEkkAQCAAkkgSQQAEggCSSBAEACSSAJBAASSAJJIACQQBJ4bRMYHx+v+wa/6wBAAhkFAgBIIAkEACBikUAAAAkkgQCA3prAuEuRQAAACSSBAAASCAAACQQAINoTGBsby5ECAESZy10OSgIBACSQBAIASCAAACQQAAASCABAlCUwLi6OBAIAoj6BcWFIIACgNyawb9++JBAAQAJJIACABAIA0CsSKCvIkQIARGUCw6+FCU3gkCFDOFgAgKgxZMiQriYwISGB4wUAiBoJCQldTaCoIGNBAEAUjP9k/zo8EdhBAsX/OFD6scbNl1JuSI8oSr9/9L6xijJaUcYoSryiPKgoyYrSR1FGKcpoRemjKDcryt2K8itFSVaU3yhKvKIoivITRXlIUW5VlLGKcrei3KwofRXlV4ry74rya0V5QFHuUpS7FCVFUW5TlPsU5ZeKEqsoP1aUkYpyn6L8+Ar3sJ+iPHLjHfORI0dOmjRJr9dffAkeeWTcuHGKoqSnp48cOVJRFL1eP2nSJPG98NBDDz300EPabxRFGTdu3COPfPv85Hbk99oHEhvXblm7fm82cuTIKVOmZGhMmjRp2LBhPbLx+I58/0rwAqFHhPRImyptwjr5uzAigf8fP6hVgMUTDXgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjQtMDEtMDZUMTU6NDk6MzkrMDA6MDADtVRTAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI0LTAxLTA2VDE1OjQ5OjM5KzAwOjAwcujs7wAAAABJRU5ErkJggg=="},5163:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/gamevault-workloads-logs-3-1baf7d54cd87481af3685e08c77f9d0d.png"},9063:(A,e,t)=>{t.d(e,{A:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkwAAAGlCAIAAACHpT5DAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAjA0lEQVR42u3cb3AbZZ7gcb2Zuh1up+ZmtyovtjjXaY9Lqbg7sSztqinYmUttFRn2srfnu8VrhoScqBMxMGFqkk0pFcIQgS8G28HJRCAgCX9CIH/cAiIHJ1pIOoHSWCixZUgkx7JbtiM7jvOHJI5lx5Zl9b14hmcbyTYGh0Fyvp+aF3ar1WpLlL7ze9SKZeHChTYAAOaLhQsXWiSeDgDAPEPkAABEDgAAIgcAAJEDAIDIAQBA5AAAIHIAACIHAACRAwCAyAEAQOQAACByAAAQOQAAkQMAgMgBAEDkAAAgcgAAEDkAAIgcAIDIETkAAJEDAIDIAQBA5AAAIHIAABA5AAC+j8j5fD7DMAzD8Pl8hfl0hEIhwzBSqZTL5eI/DgAgcl+xaNEiv99/9erVbDZrGMbIyEhzc7PT6SRyAIDijtySJUtOnz4t8mZ29epVt9tN5AAARRy5gwcPZrPZbDabSCSee+659evXf/zxx5lMxjCMeDx+3333ETkAQFFGzuFwDA4OGoZx6dKllStXio133XVXe3u7YRjDw8Pr1q2TkTty5Ehvb282m81kMqdOnVq+fLncf//+/UNDQyKWFy9efO2118yP8tprr128eFHcOjQ0tH///rvuukvctHz58s8++2xsbMwwjEwm09fX9/zzz8s7Op3OU6dOjY+PG4YxNjbW3NxcUVExm8jN8Ig2m23Tpk3i1kwmE4vF+vr6DMPQdZ3/sABgXkWurq7u+vXrhmFEIhHz9n379nV0dESj0WeeeUZGLkcoFBKFa25uzlntzGQy+/fvF4fav3+/mAulbDbb3Nx81113VVRUiMBks9nR0VGxWyqVqqqqstlsK1asOHfuXM6DdnR0LFmyZObIzfCINpvthRdeEH9yDiIHAPMtcl6vN51Oy2JNSUaus7NzxYoVGzduvHz5smEY586dW7p0qWxGIpFYuXLlM888c/78ecMwhoaG1qxZs3r16qtXrxqGcf78+WeeeWblypWJREKMZfX19Vu3bh0fH5+cnFRV1Waz1dfXi5EuGAzabLaWlhbDMNLptKqq5eXlhw8fzmQyk5OT77zzzgyRm/kR5ZCayWSamprKy8v9fv/ExASRA4B5GLl9+/aJIWw2kZOfyem6bhjGtWvX1qxZc+TIEZEir9cr989ms6JG77zzzuTkZDablfeVWT1y5IiInGEYbW1ty5cvX7Ro0erVq10ul8PhkOuoiURCTGCPPfbYpUuXpjxVc+RmfsTf/OY3IoFnzpy57777bKYFWyIHADf1JJcTORGVSCSS83mYPObBgwcPHjyYk0CXy5VKpcQC6ZIlSzo6OuSC4cjISCQSEceRu81mXdEcuZkfUf4s/14iBwDzNnLTfSZXV1fn9/vffffdX/3qV99d5Gw226JFi1RVFZeBiEcZHR2tq6uTu42Pj6e+6uTJk0QOAIjc11uxYoVYA7x06dKKFSvERvnB1ejoaFVV1cyRE8uV4hMvOfnlLFdOTk7u2bMnJ4FHjhxxOBziU7RFixYtWbJEVVXxmdynn34qFyfPnDkjrzQRu+X/FfnLldM9ojxsd3c3y5UAMM8jZ7PZNE0Tl9p3dHSI78mFQiFxdaIowcyRk1eLTHnhyZo1a4aGhqa7DEROXa+++qrNZpM7iyFPXHiSzWZbW1uXL1++YsWK1tbWc+fOyRhPGbmZH5ELTwDg5opczgdjs/kXT8yRm8tXCOSXBMxfIRgbG3vxxRdt03yFQN46XeRsfIUAAIicmfi3K8W3ucUFIC0tLTP825XmyNnm9mVwp9Np/jJ4f3//pk2b5B3FV8VFk8St5q+KTxc529d9Gfz5558Xt6bT6ZaWFrGASeQAYH5G7mZTWVkpm7d+/fqRkRHDMGKxGM8MABC54rZ69epLly6FQqGKiorly5fHYjHDMMwXqgAAiFyxamhoyPnEbrp/LQwAQOSKz6ZNm/r7+zOZTDabHR4e/vjjj6f8d58BAEQOAAAiBwAAkQMAEDkiBwAgcgAAEDkAAIgcAABEDgAAIgcAAJEDABA5AACIHAAARA4AACIHAACRAwCAyAEAiBwAAEQOAAAiBwAAkQMAgMgBAEDkAABEDgAAIgcAAJEDAIDIAQBA5AAAIHIAABA5AACRAwCAyAEAQOQAACByAAAQOQAAiBwAgMgBAEDkAAAgcgAA3MyRczgckUjE4XDw2gAACityDodjcHAwFAp9u7t7vd50Om0YRjqd9nq9vDwAgAKKnNfrbW5ulqOYz+fTdd0wjFQq5XK5vF6vruvpdFo0TBTRMAxd1+URdF2PRCLJZJJhDgBQWJFrampyuVw+n8/n88nIiR9CoZDX6xX18nq9sVjM6/Vqmmaz2TRNY24DABR05ORkJoczWbucqrlcLl3Xa2pqxP6Dg4PMbQCAgo6cGNfEz62trTkjnZjkRORk83bu3MkkBwAo9Mg5HI5kMilbJarm8/nEYCc/kzNfV+JyuZLJJJMcAKAIJrkpZzsxyQlykgMAgMgBAFCokQMAgMgBAEDkAAAgcgAAEDkAAJEDAIDIAQAw3yJnt9sVRSkFAGDOFEWx2+0FFDlFUaxWawkAAHNmtVoVRSmgyJWWlvKqAABulNLSUiIHACByRA4AQOSIHACAyBE5AACRAwCAyAEAQOS+MafTqWlaWVlZSUlJIBBwu905O7jd7kAg8E0PO+WhZk/TNI/Hw3/HADBPIqeqajgcFrEhckQOAOZD5DweTyKRSCQSonBlZWXhcFhsEe/ybrdb0zSxUVVVVVUTiUQ0GnU6neLWeDwutlRXV4fDYXGvsrKyYDDodrvF/olEQtM0sX8wGBRJU1XV4/HIyGmaZn5cc+TkCYiD5J+kyJJ5i4ic2FPcS+6gquqUh5X7RKNR+YcAAIo1cjJFcnapra0Vv8r2uN3uaDTqdrudTmc0GhWFELUTZZK1CwQCHo9HxiwQCDidzu3bt5tHqxkiZz6ZnMiJExAnqapq/knKx3U6neFw2Ol0ioeTA5nH4xFnbj4T+XdFIhG3220+SDQaJXIA5r3y8vJD0ygvL5+HkRPv7+bZTq4WmncWzZBjnNy/urpaVEcEzDw/xePxWUZODmryLnK5UnQo/yTzVxcDgUAwGMwZ0SSPx2M+bE4RWa4EcFN1Ttd18zukruszF66YlitlqEQPxIiWM8nNEDlZLHNdamtrRYrMO8xlksuJXP5J5jdJ7Ca35+9A5AAgv3OzKVwxRc7v94v1RkH2Q9ZohsjlbBGZ9Hg8gUDA7/ebDyL3lMuJ5tnxayMnuygLl3OS8tHlCqrolnw48w7iUfIjZ96Hz+QA3ISdm2Xhimm5MhAIyBHVvBIYDoeDwaAY16aLXMlXLzwR6cr5QEusE8bj8cbGRrG0KC9FaWtrkwuk5mtD8keutrY287iZf5Il01x4IrItzi3/wpOcyJnPls/kANyEnZtl4YomcuY3evNVJAAAzIdJTl6LL0ccAADmQ+QAACByAAAQOQAAkSNyAAAiR+QAAESOyAEAiBwAAEQOAIBiiJyiKFarlVcFADB3VqtVUZQCipzdblcUpRQAgDlTFMVutxdQ5AAAKDREDgBA5AAAIHIAABA5AACIHAAARA4AACIHACByAAAQOQAAiBwAAEQOAAAiBwAAkQMAEDkAAIgcAABEDgAAIgcAAJEDAIDIAQCIHJEDABA5AACIHAAARA4AACIHAACRAwCAyAEAiBwAAEQOAAAiBwAAkQMAoMgi53K5dF13OBxT3qppmtfr5YUBABRW5LxebzqdNgzDMAxd179p5BwOx+DgoLh7KBTitQEAFFbkNE0TudJ13eVyhUIhwzDS6bQYzsSvg4ODInK6rotfZfB8Pl8ymUwmkwxzAICCjtzevXtbW1vl6Ob3+5PJpMPh8Pl8g4OD27ZtE7f6fD6fz8crAQAo9MiZlytzmnf48GHxq1yuFJNcKpVyuVy8EgCA4pjk5K+xWCx/khO/btu2rampiUkOAFCUkbN9+SFczmdy4nO4bdu2RSIRJjkAQHFEDgAAIgcAAJEDAIDIAQBA5AAARA4AACIHAACRAwCAyAEAUGiRs9vtiqKUAgAwZ4qi2O32AoqcoihWq7UEAIA5s1qtiqIUUORKS0t5VQAAN0ppaSmRAwAQOSIHACByRA4AQOSIHACAyAEAQOQAACByAAAiR+S+5HQ6NU0rKysrKSkJBAJutztnB7fbHQgEvulhpzzU7Gma5vF48jcmTDweT1lZWTgcjsfjbrfb4/HIm8LhsPiLpuN2u4PBYFlZWf4xzU/IDH+Oqqr5ZzjzI073NHo8HlVVczaqqpq/EQCKNXKqqn7tW/NNHjm/3+90OktKSsrKyoLBoNvtdjqd4XBYbPR4PLOvjozclMckcgCI3I2JnJw/ROHEaCKnCvHmqGma2Cje+BKJRDQaFW/Nbrc7Ho+LLdXV1eFwWNxLvmWL/ROJhKZp5jd3+TYt39PlTJPz3m0+AXGQ/JM0j1lii6iC2FPcS+4g3rvzDyv3iUaj8g+ZMnIej0ecs7i7mOSmrE7OWcmnKxgM5kROHFNWPxgMmifCQCDQ2NgoH0s8e42NjeJo0z0J5udQ7BkOh3fs2CF+Fn9pU1OT+QUSr1c8Hg8Gg+KJEg8tHxcAiiZyMkVydqmtrRW/yva43e5oNComjGg0Kt74RO1EmWTtAoGAfKcWvzqdzu3bt5tnkRkiZz6ZnDdocQLiJFVVzT9JcyHEaCUeTg5k5mFFnon8uyKRiFhvlAeJRqMzzEnysOZJTlXVnMbknFV1dbX8A/PnZvMx5aOLY4pb5RMbiUScTqc8wpTnL8/K/P9mZMtzZjX5g3x1RL/FRvnQAOaf8vLyQ9MoLy+fh5ET77Dm2U4uc5l3Fs2Q84Hcv7q6WlRHjjXyfV+MArOJXM6EZF5nE+/U+SeZv7oYCASCwWDOiGb+6Mt82JwiymdDjrnmd3nzn5AfOXOHcs7KfEfzz/nHlMuVcrtcrjSPyDlnm/Nw8lkSY3dO5My/5tfO/PMcF34BFH7ndF03v0Pquj5z4YppuVKGSq5Wibc28yQ3Q+TM79QyGLW1tSJF5h3mMsnlRC7/JPMjJ3aT2/N3mE3kpnzGzCWYcmaSf8jsI5dzzBsSufx1aVm1nI/9iBxA52TnZlO4Yoqc/Ewo561Nvr3OELmcLeI91OPxBAIBv9+fs/yVf6WGnB2/NnKyB7JwOScpH12uoIq3Zvlw5h3Eo+RHzrzPlJ/J5VdN/mq+i5zkcs7KvFzp8XjkcuV0x8xZrsw5uLn0OcuV5mXk/MjlP8/5z6d8qokccFN1bpaFK6blykAgIEdU80pgOBwWlx7MELmSr154It5Vcz7QEuuE8Xi8sbFRvK3LS1Ha2trkAqn52pD8kautrc08buafZMk0F56Id3BxbvkXnuREzny2030mJ6uTHyR5VuZrNKa78CQajZon2vxjyutE5Bycc3BVVdva2ma++iZ/ZBeftMlXXK5k5lx4Il4dIgfcbJ2bZeGKJnLmN/op/+8/AABFPMnJa/HliAMAwHyIHAAARA4AACIHACByRA4AQOSIHACAyBE5AACRAwBgXkVOURSr1cqrAgCYO6vVqihKAUXObrcrilIKAMCcKYpit9sLKHIAABQaIgcAIHIAABA5AACIHAAARA4AACIHAACRAwAQOQAAiBwAAEQOAAAiBwAAkQMAgMgBAIgcAABEDgAAIgcAAJEDAIDIAQBA5AAARI7IAQCIHAAARA4AACIHAACRAwCAyAEAQOQAAEQOAAAiBwAAkQMAgMgBAEDkAAAoksiFQiGfzzeXIzgcjkgk4nA4eIEBgMjdsMiFQiHDMAzDmE2lXC5Xa2vrDf+TvF5vOp02DCOdTnu9Xl5jACByNyByXq83mUyK+SkWi3m9Xp/PZ25ea2vr4OCgYRihUMjhcIifdV13uVypVEr8bLPZfD6fz+fzer26rqfT6VQq5XK55P6Dg4MOh0Pcmkql/H6/PI48E13XI5GIPBkAAJG7AWOcHOAcDserr74q1gwdDocoma7rPp9P/CBCFYvFbDZbU1OTy+USFXS5XDJyolLisPLgObd6vV5N02w2m6ZpzG0AgD9G5GxfXY0Ug51omPzATEZODnxiaJMZE/USv8qFUDEIyltzJjxeUQDAdxI5GS2bzabr+vHjx8XEJie56SInEpg/yeVEThRUHEHe6vV6d+7cySQHAPhuI2fLu/Ak/zO5nMil02lRL7HblStXxK/5kZMTmziavNXlciWTSSY5AMB3HjkAAIgcAABEDgAAIgcAAJEDABA5AACIHAAARA4AACIHAEBBRc5utyuKUgoAwJwpimK32wsocoqiWK3WEgAA5sxqtSqKUkCRKy0t5VUBANwopaWlRA4AQOSIHACAyBE5AACRI3IAACIHAACRAwCAyAEAiByR+5LT6dQ0raysrKSkJBAIuN3unB3cbncgEPimh53yULOnaZrH4+G/YwCYJ5FTVTUcDovYEDkiBwDzIXIejyeRSCQSCVG4srKycDgstoh3ebfbrWma2KiqqqqqiUQiGo06nU5xazweF1uqq6vD4bC4V1lZWTAYdLvdYv9EIqFpmtg/GAyKpKmq6vF4ZOQ0TTM/rjly8gTEQfJPUmTJvEVETuwp7iV3UFV1ysPKfaLRqPxDAGAeKy8vPzSN8vLyoo+cTJGcXWpra8Wvsj1utzsajbrdbqfTGY1GRSFE7USZZO0CgYDH45ExCwQCTqdz+/bt5tFqhsiZTyYncuIExEmqqpp/kvJxnU5nOBx2Op3i4eRA5vF4xJmbz0T+XZFIxO12mw8SjUaJHICbpHO6ridMdF2fuXBFHDnx/m6e7eRqoXln0Qw5xsn9q6urRXVEwMzzUzwen2Xk5KAm7yKXK0WH8k8yf3UxEAgEg8GcEU3yeDzmw+YUkeVKADdt52ZTuGJarpShEj0QI1rOJDdD5GSxzHWpra0VKTLvMJdJLidy+SeZ3ySxm9yevwORA4Cczs2ycMUUOb/fL9YbBdkPWaMZIpezRWTS4/EEAgG/328+iNxTLieaZ8evjZzsoixczknKR5crqKJb8uHMO4hHyY+ceR8+kwNwE3ZuloUrpuXKQCAgF/HMK4HhcDgYDIpxbbrIlXz1whORrpwPtMQ6YTweb2xsFEuL8lKUtrY2uUBqvjYkf+Rqa2szj5v5J1kyzYUnItvi3PIvPMmJnPls+UwOAIo+cuY3evNVJAAAzIdJTl6LL0ccAADmQ+QAACByAAAQOQAAkSNyAAAiR+QAAESOyAEAiBwAAPMqcoqiWK1WXhUAwNxZrVZFUQoocna7XVGUUgAA5kxRFLvdXkCRAwCg0BA5AACRAwCAyAEAQOQAACByAAAQOQAAiBwAgMgBAEDkAAAgcgAAEDkAAIgcAABEDgBA5AAAIHIAABA5AACIHAAARA4AACIHACByRA4AQOQAACByAAAQOQAAiBwAAEQOAAAiBwAgcgAAEDkAAIgcAABEDgCAIoicy+XSdd3hcLS2trpcrin3CYVCPp/v2x28tbWV1xIA8F1FzuFwDA4OGl9KpVJTxswcOYfDoev6dM2bJZ/PN/MjAgCI3I2Z5MzdCoVChmGk02mv1+twOCKRSM4klxM5n8/n8/m8Xq+u6+l0WkRLtnNwcNDhcHi93nQ6bRiGnPkcDkcymYxEIrqu83ICAP4YkXO5XE1NTTabzev1apr2jSKXTCYdDodYvZRrmOJWTdPMyeT1AwB8D5Ezr16GQqFvFDlN0+SvYhyUx5GTXCgU4sUDAHw/kfN6vbFY7NtNcjmRE5OcCGdTU5P4gUkOAPD9T3KpVOry5cuvvvqqyJKu6/LDM/O0p+v6lJEz7+Pz+Xbu3JlKpZjkAADfQ+QAACByAAAQOQAAiBwAAEQOAEDkAAAgcgAAEDkAAIgcAABEDgCAP0bk7Ha7oiilAADMmaIodru9gCKnKIrVai0BAGDOrFaroigFFLnS0lJeFQDAjVJaWkrkAABEjsgBAIgckQMAEDkiBwCYrdtvv/3ee+/9xS9+ce+9995+++1EDgAwH9x2222VlZV1dXWbv1RXV1dZWXnbbbcROQBAcRdu1apV9fX1m7+qvr5+1apVM3eOyAEACtqyZcteeOGF+vr6Z599VqRO/vzCCy8sW7ZsPkTO4/EkvqSqaklJidPpjEajiUQiHA6XlZVNuQUAUOxj3FNPPbV58+ba2toHHnigsrJy06ZNlZWVDzzwQG1t7ebNm5966qkZhrmiiZyqqpqmmbdomqaqallZWTgc9ng8U24BABS1e+65p6qqSqxP1tTUVFRULF68uKKioqamRmysqqq65557ij5yImDyVzG0iZKJ/uVv4T8OAJhPkauvr3/kkUfuuOOORx55RH5ENx8iJ9chE4lENBp1Op1OpzMSibjdbpG0cDhcXV2ds4UVSwAodnfccceGDRtE4SorKysqKqqqqioqKiorK0XnNmzYcMcddxT9JCdNlzQiBwDz0qOPPlpfX19XV/fEE0+IVcqamponnniirq6uvr7+0UcfneG+xRc5j8cTjUZffPFFlisB4GZw5513rl+/fvNU1q9ff+eddxZ95JxOZzgcdjqdJSUlmqaJgHHhCQDcJO6+++5169aZvypXX1+/bt26u+++e+Y7Ft9XCMRnciWmD+rk0Ja/BQAwbyxevPixxx5bt27dY489tnjx4tnchS+DAwDmLSIHACByRA4AQOSIHACAyBE5AACRAwCAyAEAQOQAAETujx45RVGsViuvCgBg7qxWq6IoBRQ5u92uKEopAABzpiiK3W4voMgBAFBoiBwAgMgBAEDkAAAgcgAAEDkAAIgcAABEDgBA5ADgJn+LfClWpP+b8s+5v9gQOQAgckSOyAEAkSNyAAAiR+QAgMgROSIHAESOyBE5ACByRI7IAQCRI3JEDgCIHJEjcgBA5IgcABA5IkfkAOCmidxPfd2rgoOPHhu4dWen5aXY7bv1He1X9nQO/ey9niKN3NNPP/3yyy9v3Lhx6dKl30W6NmzYcOjQob1791ZWVhI5ACjQyN26s/O19isjE5OGYRiGMZyefP30lfJAX/vlsf7UxAMf9hVd5Fwu19GjR/v7+wcGBgYGBjo6OrZv337DI7dly5bOzs5QKLR69WoiBwAFGrlnT1wYTk8OjU8ePDOs6kPnRiaG05Nvx68WaeQefvjhAwcO9PX1nT59uqmp6fDhwz09Pe3t7bW1tUQOAG6uyN2+Wz92duR6JvviqS9+tO205aXYP/9+UNWHfhu+0H557Fp6MjE0PjqR7bgyvio4aHkp9rP3egJnhq+lJzNZo/da+v+1XPzRttNTbnzww/5PB0dHJ7JnUxO74ld/6uv+y11db5y+cmE0k8kaF0YzO9qv/OWurhseObfbffLkya6urq1bt4rm7d69+/3339+wYcPevXtjsVgymTx58uSOHTuWLl26Y8eOzz777MSJE11dXYlE4tChQ6tWrVq6dOmbb74ZjUb7+vri8XhTU9Pq1avr6uqOHz+eTCaTyWQ4HK6pqSFyAFDokfvb/b2nL4+dH534v9pZ8/ZF+3vbL49lDSMxNJ4cThuGEbs8VvEvfe8lrmWyxpWxTGJofGIye2E0sy50Pn9jXdulzy5eT09mO66MnxuZuJ7Jbj35xZbPvxidyF68njl5aex6JjucnnzmxIUbHrktW7Z0dXW1tLSsXbvWvH3Hjh3d3d2dnZ2tra09PT0dHR11dXV79uxJJpM9PT0tLS29vb3JZHL37t2bN2+Ox+M9PT3hcLijo6Ovr+/o0aMtLS19fX2RSKS9vX1gYKC5uXnXrl1EDgAKOnJLPjjTPZQ+NzLxfw5PEbmzqYllH/X/7f7e9stjAyMTdW2Xuq6On01NPHS4f8Hr8bfjV69nskf6U4mhKTb2XEv3DaeXfdR/z3s9//z7wcWNZ7T+1ND4pPv4hR9tO73l8y9GJiY/6B0W17ncwMh5vd7u7u7jx4+vWbPGvP3xxx9/5ZVXnnzySafTKdYw33jjjT179vT29jY1NTmdzr179/b29n744YcHDhzo7e09cODAww8/XFNT09TUdOjQIV3Xm5ubV69e/eSTT7a2tnZ2dh48eJDIAUBBR+7ext6uq+MXRjNTTnLiM7mf+rojF6+fH514s+PK4MhE++WxRft7LS/FaiKXRiYmT30xdvF6Jmfjx2dHDp4ZnpjMGoYxPpn9+OzI6uDg55euG1/16eCofW/ixkbO4/Houp4/ya1fv17TtM7OzrNnzw4MDPT29u7cuVNE7oMPPnj44YfffPPNnp6eY8eOHTt2rLe3d8+ePfK+u3btOnPmzIBJT0/P0aNHiRwAFHTk/roh8eng6HB6csPxP6wcPvbxgE8fevbEhfzIbYtd7k9NdF4dv7ex1/JSbPNnX4xMTLZcuH5uJHejv+faX+1LrG0+f+jMcO+19MRk9l+Sw20Xrw+nJ3d3Xn3hs0tbPv/i5ejllZ+cW/B6/MZGbuPGje3t7e3t7Rs3brz//vuXLl26c+fOAwcOHDt2LJlMnjhxwufzffrppz09PVNG7ujRo4cPH+7t7W1oaBAf6a1du/att97q6ek5ceLE7t2733777YaGhl27du3du5fIAUBBR+5H206/dOryWCbbPZR+Onyh6sTF3mvpsUz2/e5rHVfGcyJXdeLi78+NjE5k93UNrQudj10eG53I7uy4mr/xQM+1lgvX/T3Xlnxw5uXoZZG9xp5r45PZw32pBz/sf+P0lYvXM1tP/uFqlxsYuccff1zTtP7+/ubm5q1bt/p8Pl3Xu7u7T506lUwm33///aeffjoUCiWTyQMHDjQ1NeVE7sMPP2xoaOjt7W1ra/N6ve+//76u68ePH+/s7Ozo6HjzzTc3bdoUiUROnDihqmpXV9fnn3/+4osvzvxVPCIHAN9P5MTXwLX+1GT2D0uI45PZD3qHHz02kD/JPXJ0YG3z+ctjGbneGBocvee9nvyNK44OfNSXynx5zP7UxIqjAw9+2N89lJa7dQ+lHzrc/118T+65555ra2uTS4uJRKKhoeGdd97RdV1s6e7uTiaTHR0dn3zySX7kqqqqmpub5d27urreeustv9/f19cntohAbtmyJRaLDQwMBIPBX//610QOAAoxcpaXYgvf6apru/RRX2pf15DjyFnxDfFVwcF1ofO379YXvB5/4pNzT4XP/3VDwvJS7KHD/e8mho70p373+RfyE7X8jQtej6/85FyDPrQ9dkWsZIqPAHd2XD14Zri69eLMn8bN8V88Wbt27XvvvXf06NF33333t7/9rdhYVVXl9/sbGhrWrl377LPPvvzyy7/73e/eeOMNsbC5fv36119/vaam5v7771+1atWePXuOHDmyb9++J598UqxbvvLKKx999FFjY6PY5/7776+pqXnrrbc2b97MJAcAhRs5/u1K/u1KACByRI7IAQCRI3JEDgCIHJEjcgBA5IgckQMAIkfkAIDIETkiBwBEjsgROQAgckSOyAEAkSNyRA4AiByRI3IAgHn/f1OIHACAyAEAQOQAACByAAAQOQAAiBwAAEQOAEDkAAAgcgAAEDkAAIgcAABEDgAAIgcAIHIAABA5AACIHAAARA4AgO8mcgsXLuTpAADMGwsXLvzXyC1YsIBnBAAwbyxYsMBitmDBAuY5AMA8mOFyC/cVf/JDyz/90mL/K8vM/uNtlr9b8pUtP/kzyz+UWW7995Zv55ZbLP/97y1//udT3/qz/2ZZttzyy2WWXy6z3P6fLRaL5T9YLeUPWB58yPI//5fl3/3EYrFYfvADy88XWR58yPKP//TtT+Nf13BtlooHLb9cZrlLsQAAbi75kZujW26xLPkf00bu54tyu/vDWyz/9k8tFovl7r+x/M3PLRaL5b/8V8vfLbH84AeW2/6T5e//wfJv/uQbPPoPf2hZfJ/lJ3/2h19//GNL2T9a/uIvLD/+saXsf1tuvZUXHACK1P8Hlud5fY7GZwwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjQtMDEtMDZUMTU6NDk6MzkrMDA6MDADtVRTAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI0LTAxLTA2VDE1OjQ5OjM5KzAwOjAwcujs7wAAAABJRU5ErkJggg=="},3333:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-add-truecharts-catalog-201abb147a45192270d8978f1d560324.png"},5415:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-configure-gamevault-app-install-1-f77e819fe4925ed18904f80e6f0d613e.png"},4197:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-configure-gamevault-app-install-3-ac408b5dfd46341a7f7c77f6196fd506.png"},5952:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-configured-gamevault-app-installed-db255883caaf34572f6403034d11f56a.png"},3830:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-discover-gamevault-app-install-203a397bf7abfccc33be4462ec225bb5.png"},5691:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-discover-gamevault-app-search-042a9ac7bc7a5ce195b085144c4a3e60.png"},3927:(A,e,t)=>{t.d(e,{A:()=>n});const n=t.p+"assets/images/scale-login-248c8e0a2719f7dc7db7893a7d97dc3b.png"},8591:(A,e,t)=>{t.d(e,{R:()=>r,x:()=>c});var n=t(758);const a={},s=n.createContext(a);function r(A){const e=n.useContext(s);return n.useMemo((function(){return"function"==typeof A?A(e):{...e,...A}}),[e,A])}function c(A){let e;return e=A.disableParentContext?"function"==typeof A.components?A.components(a):A.components||a:r(A.components),n.createElement(s.Provider,{value:e},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/5baa483a.88d5f495.js b/assets/js/5baa483a.b9cf08d1.js similarity index 84% rename from assets/js/5baa483a.88d5f495.js rename to assets/js/5baa483a.b9cf08d1.js index ec2a17e62..bee214a8f 100644 --- a/assets/js/5baa483a.88d5f495.js +++ b/assets/js/5baa483a.b9cf08d1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9006],{5735:a=>{a.exports=JSON.parse('{"tag":{"label":"speculation","permalink":"/blog/tags/speculation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/speculation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2888],{8961:a=>{a.exports=JSON.parse('{"tag":{"label":"speculation","permalink":"/blog/tags/speculation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/speculation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5bbd8cf3.326f16e2.js b/assets/js/5bbd8cf3.326f16e2.js new file mode 100644 index 000000000..244a8a020 --- /dev/null +++ b/assets/js/5bbd8cf3.326f16e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[894],{996:a=>{a.exports=JSON.parse('{"tag":{"label":"Kanban Board","permalink":"/blog/tags/kanban-board","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/kanban-board","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5bbd8cf3.d768f173.js b/assets/js/5bbd8cf3.d768f173.js deleted file mode 100644 index 153c60478..000000000 --- a/assets/js/5bbd8cf3.d768f173.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8912],{7288:a=>{a.exports=JSON.parse('{"tag":{"label":"Kanban Board","permalink":"/blog/tags/kanban-board","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/kanban-board","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5c99339f.820589b5.js b/assets/js/5c99339f.4f5f69cd.js similarity index 84% rename from assets/js/5c99339f.820589b5.js rename to assets/js/5c99339f.4f5f69cd.js index 9049a79b9..e5264fd42 100644 --- a/assets/js/5c99339f.820589b5.js +++ b/assets/js/5c99339f.4f5f69cd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7283],{9948:a=>{a.exports=JSON.parse('{"tag":{"label":"backend","permalink":"/blog/tags/backend","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/backend","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3294],{5248:a=>{a.exports=JSON.parse('{"tag":{"label":"backend","permalink":"/blog/tags/backend","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/backend","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5db30e8c.e2e7c57f.js b/assets/js/5db30e8c.a6543c4e.js similarity index 84% rename from assets/js/5db30e8c.e2e7c57f.js rename to assets/js/5db30e8c.a6543c4e.js index 8b4f6b016..27cdd7fc8 100644 --- a/assets/js/5db30e8c.e2e7c57f.js +++ b/assets/js/5db30e8c.a6543c4e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7044],{9692:e=>{e.exports=JSON.parse('{"tag":{"label":"self-hosted","permalink":"/blog/tags/self-hosted","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/self-hosted","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1767],{9613:e=>{e.exports=JSON.parse('{"tag":{"label":"self-hosted","permalink":"/blog/tags/self-hosted","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/self-hosted","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5e5c84c3.0d9ccf83.js b/assets/js/5e5c84c3.0d9ccf83.js new file mode 100644 index 000000000..e95259792 --- /dev/null +++ b/assets/js/5e5c84c3.0d9ccf83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6051],{2031:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>a});const i=JSON.parse('{"id":"server-docs/game-types","title":"Game Types","description":"GameVault recognizes various Game Types, which affect how the application handles games, particularly during installation.","source":"@site/docs/server-docs/game-types.md","sourceDirName":"server-docs","slug":"/server-docs/game-types","permalink":"/docs/server-docs/game-types","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/game-types.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":2.5,"frontMatter":{"sidebar_position":2.5},"sidebar":"docs","previous":{"title":"File and Folder Structure","permalink":"/docs/server-docs/structure"},"next":{"title":"Adding Games to GameVault","permalink":"/docs/server-docs/adding-games"}}');var t=s(6070),l=s(8591);const r={sidebar_position:2.5},d="Game Types",c={},a=[{value:"Supported Game Types",id:"supported-game-types",level:2},{value:"Windows",id:"windows",level:3},{value:"Setup (W_S)",id:"setup-w_s",level:4},{value:"Portable (W_P)",id:"portable-w_p",level:4},{value:"Linux",id:"linux",level:3},{value:"Portable (L_P)",id:"portable-l_p",level:4},{value:"Undetected",id:"undetected",level:3}];function o(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"game-types",children:"Game Types"})}),"\n",(0,t.jsxs)(n.p,{children:["GameVault recognizes various ",(0,t.jsx)(n.strong,{children:"Game Types"}),", which affect how the application handles games, particularly during installation."]}),"\n",(0,t.jsxs)(n.p,{children:["The Game Type is automatically detected, but users can manually override it using the correct type tag, based on ",(0,t.jsx)(n.a,{href:"/docs/server-docs/structure",children:"GameVault\u2019s Naming Structure"}),". Each game can only have one type tag; if multiple tags are present, only one will be applied."]}),"\n",(0,t.jsx)(n.h2,{id:"supported-game-types",children:"Supported Game Types"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Additional game types, such as ROMs and Android applications, may be added in the future.",(0,t.jsx)(n.br,{}),"\n","You can request more game types ",(0,t.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-backend/issues/new",children:"here"}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"windows",children:"Windows"}),"\n",(0,t.jsx)(n.h4,{id:"setup-w_s",children:"Setup (W_S)"}),"\n",(0,t.jsxs)(n.p,{children:["Windows Setup games require an installation process before play, initiated by setup-related files such as ",(0,t.jsx)(n.code,{children:"setup.exe"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Detection"}),": Identified through the type tag override or by specific setup-related executables in the archive."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"File Patterns"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"setup.exe"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"autorun.exe"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"setup_*.exe"})," (e.g., ",(0,t.jsx)(n.code,{children:"setup_game.exe"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"setup-*.exe"})," (e.g., ",(0,t.jsx)(n.code,{children:"setup-game.exe"}),")"]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"install.exe"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"unarc.exe"})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:".msi"})," files (excluding those containing ",(0,t.jsx)(n.code,{children:"redist"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Example Files in Archive"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"data.bin"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"data2.bin"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"setup.exe"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"portable-w_p",children:"Portable (W_P)"}),"\n",(0,t.jsx)(n.p,{children:"Portable Windows games can be played immediately without requiring a setup."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Detection"}),": Recognized through the type tag override or by the presence of ",(0,t.jsx)(n.code,{children:".exe"})," and ",(0,t.jsx)(n.code,{children:".msi"})," files, lacking setup-specific filenames."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Example Files in Archive"}),":","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"Butcher_Data/"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"Butcher.exe"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"linux",children:"Linux"}),"\n",(0,t.jsx)(n.h4,{id:"portable-l_p",children:"Portable (L_P)"}),"\n",(0,t.jsx)(n.p,{children:"Linux Portable games can be played immediately without additional setup."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Detection"}),": Determined by the type tag override or by the presence of ",(0,t.jsx)(n.code,{children:".sh"})," files, with no ",(0,t.jsx)(n.code,{children:".exe"})," or ",(0,t.jsx)(n.code,{children:".msi"})," files."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Example Files in Archive"}),":","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"Butcher_Data/"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"Butcher.sh"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"undetected",children:"Undetected"}),"\n",(0,t.jsx)(n.p,{children:"This is the default type if GameVault cannot automatically detect the game type. Users will need to manually install the game into the installation folder."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Example Files in Archive"}),":","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"data/"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"run.c64"})}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},8591:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>d});var i=s(758);const t={},l=i.createContext(t);function r(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e5c84c3.68da2443.js b/assets/js/5e5c84c3.68da2443.js deleted file mode 100644 index dda95d2d4..000000000 --- a/assets/js/5e5c84c3.68da2443.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8516],{2836:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>a});var i=s(2676),t=s(8358);const l={sidebar_position:2.5},r="Game Types",d={id:"server-docs/game-types",title:"Game Types",description:"GameVault recognizes various Game Types, which affect how the application handles games, particularly during installation.",source:"@site/docs/server-docs/game-types.md",sourceDirName:"server-docs",slug:"/server-docs/game-types",permalink:"/docs/server-docs/game-types",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/game-types.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:2.5,frontMatter:{sidebar_position:2.5},sidebar:"docs",previous:{title:"File and Folder Structure",permalink:"/docs/server-docs/structure"},next:{title:"Adding Games to GameVault",permalink:"/docs/server-docs/adding-games"}},c={},a=[{value:"Supported Game Types",id:"supported-game-types",level:2},{value:"Windows",id:"windows",level:3},{value:"Setup (W_S)",id:"setup-w_s",level:4},{value:"Portable (W_P)",id:"portable-w_p",level:4},{value:"Linux",id:"linux",level:3},{value:"Portable (L_P)",id:"portable-l_p",level:4},{value:"Undetected",id:"undetected",level:3}];function o(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"game-types",children:"Game Types"})}),"\n",(0,i.jsxs)(n.p,{children:["GameVault recognizes various ",(0,i.jsx)(n.strong,{children:"Game Types"}),", which affect how the application handles games, particularly during installation."]}),"\n",(0,i.jsxs)(n.p,{children:["The Game Type is automatically detected, but users can manually override it using the correct type tag, based on ",(0,i.jsx)(n.a,{href:"/docs/server-docs/structure",children:"GameVault\u2019s Naming Structure"}),". Each game can only have one type tag; if multiple tags are present, only one will be applied."]}),"\n",(0,i.jsx)(n.h2,{id:"supported-game-types",children:"Supported Game Types"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Additional game types, such as ROMs and Android applications, may be added in the future.",(0,i.jsx)(n.br,{}),"\n","You can request more game types ",(0,i.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-backend/issues/new",children:"here"}),"."]})}),"\n",(0,i.jsx)(n.h3,{id:"windows",children:"Windows"}),"\n",(0,i.jsx)(n.h4,{id:"setup-w_s",children:"Setup (W_S)"}),"\n",(0,i.jsxs)(n.p,{children:["Windows Setup games require an installation process before play, initiated by setup-related files such as ",(0,i.jsx)(n.code,{children:"setup.exe"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Detection"}),": Identified through the type tag override or by specific setup-related executables in the archive."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"File Patterns"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"setup.exe"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"autorun.exe"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"setup_*.exe"})," (e.g., ",(0,i.jsx)(n.code,{children:"setup_game.exe"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"setup-*.exe"})," (e.g., ",(0,i.jsx)(n.code,{children:"setup-game.exe"}),")"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"install.exe"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"unarc.exe"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:".msi"})," files (excluding those containing ",(0,i.jsx)(n.code,{children:"redist"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Example Files in Archive"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"data.bin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"data2.bin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"setup.exe"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"portable-w_p",children:"Portable (W_P)"}),"\n",(0,i.jsx)(n.p,{children:"Portable Windows games can be played immediately without requiring a setup."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Detection"}),": Recognized through the type tag override or by the presence of ",(0,i.jsx)(n.code,{children:".exe"})," and ",(0,i.jsx)(n.code,{children:".msi"})," files, lacking setup-specific filenames."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Example Files in Archive"}),":","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Butcher_Data/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Butcher.exe"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"linux",children:"Linux"}),"\n",(0,i.jsx)(n.h4,{id:"portable-l_p",children:"Portable (L_P)"}),"\n",(0,i.jsx)(n.p,{children:"Linux Portable games can be played immediately without additional setup."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Detection"}),": Determined by the type tag override or by the presence of ",(0,i.jsx)(n.code,{children:".sh"})," files, with no ",(0,i.jsx)(n.code,{children:".exe"})," or ",(0,i.jsx)(n.code,{children:".msi"})," files."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Example Files in Archive"}),":","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Butcher_Data/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Butcher.sh"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"undetected",children:"Undetected"}),"\n",(0,i.jsx)(n.p,{children:"This is the default type if GameVault cannot automatically detect the game type. Users will need to manually install the game into the installation folder."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Example Files in Archive"}),":","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"data/"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"run.c64"})}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8358:(e,n,s)=>{s.d(n,{Z:()=>d,a:()=>r});var i=s(5271);const t={},l=i.createContext(t);function r(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.381be7a7.js b/assets/js/5e95c892.381be7a7.js new file mode 100644 index 000000000..2cda08c66 --- /dev/null +++ b/assets/js/5e95c892.381be7a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9647],{5979:(e,s,a)=>{a.r(s),a.d(s,{default:()=>n});a(758);var r=a(3526),u=a(5003),c=a(8539),t=a(389),l=a(3385),d=a(6070);function n(e){return(0,d.jsx)(u.e3,{className:(0,r.A)(c.G.wrapper.docsPages),children:(0,d.jsx)(l.A,{children:(0,t.v)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.892705da.js b/assets/js/5e95c892.892705da.js deleted file mode 100644 index 0621d9878..000000000 --- a/assets/js/5e95c892.892705da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9661],{5970:(e,s,a)=>{a.r(s),a.d(s,{default:()=>n});a(5271);var r=a(4814),u=a(9967),c=a(3509),t=a(7677),l=a(3557),d=a(2676);function n(e){return(0,d.jsx)(u.FG,{className:(0,r.Z)(c.k.wrapper.docsPages),children:(0,d.jsx)(l.Z,{children:(0,t.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5fa82f91.fa2d39df.js b/assets/js/5fa82f91.b7e4a4f5.js similarity index 84% rename from assets/js/5fa82f91.fa2d39df.js rename to assets/js/5fa82f91.b7e4a4f5.js index 432b1e73b..ec87aab54 100644 --- a/assets/js/5fa82f91.fa2d39df.js +++ b/assets/js/5fa82f91.b7e4a4f5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4503],{1722:a=>{a.exports=JSON.parse('{"tag":{"label":"GameShelf","permalink":"/blog/tags/game-shelf","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-shelf","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4939],{4194:a=>{a.exports=JSON.parse('{"tag":{"label":"GameShelf","permalink":"/blog/tags/game-shelf","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-shelf","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/61be0f73.24a6894b.js b/assets/js/61be0f73.24a6894b.js deleted file mode 100644 index bb9675c0f..000000000 --- a/assets/js/61be0f73.24a6894b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[452],{5931:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>o});var r=n(2676),d=n(8358);const i={sidebar_position:2},c="File and Folder Structure",t={id:"server-docs/structure",title:"File and Folder Structure",description:"If you want to set up a GameVault Server, you need to pay attention to the file and folder structure.",source:"@site/docs/server-docs/structure.md",sourceDirName:"server-docs",slug:"/server-docs/structure",permalink:"/docs/server-docs/structure",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/structure.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docs",previous:{title:"Configuration",permalink:"/docs/server-docs/configuration"},next:{title:"Game Types",permalink:"/docs/server-docs/game-types"}},l={},o=[{value:"Supported Archive Formats",id:"supported-archive-formats",level:2},{value:"Single File Executable",id:"single-file-executable",level:3},{value:"Naming Convention for Games",id:"naming-convention-for-games",level:2},{value:"Other Examples",id:"other-examples",level:3}];function a(e){const s={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"file-and-folder-structure",children:"File and Folder Structure"})}),"\n",(0,r.jsxs)(s.p,{children:["If you want to set up a GameVault Server, you need to pay attention to the file and folder structure.\nThe volume mapped to the ",(0,r.jsx)(s.code,{children:"/files"})," directory must contain your games. These games must be named correctly and should either be archived in one of the supported archive formats listed below or be a single-file executable as described below to be accurately detected by GameVault."]}),"\n",(0,r.jsx)(s.h2,{id:"supported-archive-formats",children:"Supported Archive Formats"}),"\n",(0,r.jsx)(s.p,{children:"GameVault supports all file formats 7zip 23.01 (2023-06-20) does:"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:".7z"})," ",(0,r.jsx)(s.code,{children:".xz"})," ",(0,r.jsx)(s.code,{children:".bz2"})," ",(0,r.jsx)(s.code,{children:".gz"})," ",(0,r.jsx)(s.code,{children:".tar"})," ",(0,r.jsx)(s.code,{children:".zip"})," ",(0,r.jsx)(s.code,{children:".wim"})," ",(0,r.jsx)(s.code,{children:".ar"})," ",(0,r.jsx)(s.code,{children:".arj"})," ",(0,r.jsx)(s.code,{children:".cab"})," ",(0,r.jsx)(s.code,{children:".chm"})," ",(0,r.jsx)(s.code,{children:".cpio"})," ",(0,r.jsx)(s.code,{children:".cramfs"})," ",(0,r.jsx)(s.code,{children:".dmg"})," ",(0,r.jsx)(s.code,{children:".ext"})," ",(0,r.jsx)(s.code,{children:".fat"})," ",(0,r.jsx)(s.code,{children:".gpt"})," ",(0,r.jsx)(s.code,{children:".hfs"})," ",(0,r.jsx)(s.code,{children:".ihex"})," ",(0,r.jsx)(s.code,{children:".iso"})," ",(0,r.jsx)(s.code,{children:".lzh"})," ",(0,r.jsx)(s.code,{children:".lzma"})," ",(0,r.jsx)(s.code,{children:".mbr"})," ",(0,r.jsx)(s.code,{children:".msi"})," ",(0,r.jsx)(s.code,{children:".nsis"})," ",(0,r.jsx)(s.code,{children:".ntfs"})," ",(0,r.jsx)(s.code,{children:".qcow2"})," ",(0,r.jsx)(s.code,{children:".rar"})," ",(0,r.jsx)(s.code,{children:".rpm"})," ",(0,r.jsx)(s.code,{children:".squashfs"})," ",(0,r.jsx)(s.code,{children:".udf"})," ",(0,r.jsx)(s.code,{children:".uefi"})," ",(0,r.jsx)(s.code,{children:".vdi"})," ",(0,r.jsx)(s.code,{children:".vhd"})," ",(0,r.jsx)(s.code,{children:".vmdk"})," ",(0,r.jsx)(s.code,{children:".wim"})," ",(0,r.jsx)(s.code,{children:".xar"})," ",(0,r.jsx)(s.code,{children:".z"})]}),"\n",(0,r.jsx)(s.h3,{id:"single-file-executable",children:"Single File Executable"}),"\n",(0,r.jsxs)(s.p,{children:["We recommend ",(0,r.jsx)(s.a,{href:"#supported-archive-formats",children:"archiving games"})," to save storage and bandwidth. However, if the game is just a single file executable, like ",(0,r.jsx)(s.code,{children:"setup_game.exe"})," or ",(0,r.jsx)(s.code,{children:"setup_game.sh"}),", you can import it into GameVault without archiving. Just be sure to rename it as described below for compatibility with GameVault (e.g. ",(0,r.jsx)(s.code,{children:"Minecraft (v1.12) (2011).exe"}),"). By default, GameVault autodetects the ",(0,r.jsx)(s.a,{href:"/docs/server-docs/game-types",children:"game type"}),' of single-file executables as a setup-type game. In rare cases, games can be single portable executables without additional setup. If that\'s the case, make sure to mark the games as "Portable" using the type override.']}),"\n",(0,r.jsxs)(s.p,{children:["Supported Executables:",(0,r.jsx)(s.br,{}),"\n",(0,r.jsx)(s.code,{children:".exe"})," ",(0,r.jsx)(s.code,{children:".sh"})]}),"\n",(0,r.jsx)(s.admonition,{title:"Downloading single-file executables",type:"note",children:(0,r.jsxs)(s.p,{children:["Single-file executables are packed into a ",(0,r.jsx)(s.code,{children:".tar"})," file (no compression) and cached in the server's ",(0,r.jsx)(s.code,{children:"/tmp"})," folder on-the-fly when users download them, to make them compatible with the GameVault Client. The cached files are reused until deleted by a Server Restart."]})}),"\n",(0,r.jsx)(s.h2,{id:"naming-convention-for-games",children:"Naming Convention for Games"}),"\n",(0,r.jsx)(s.p,{children:"The name of each game file must follow this format:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"Title (Version) (EarlyAccess) (GameType) (NoCache) (ReleaseYear).zip"})}),"\n",(0,r.jsxs)(s.p,{children:["Note that the parentheses must be included, and the naming convention is ",(0,r.jsx)(s.strong,{children:"case sensitive"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"Here's an explanation of each part of the naming convention:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Part"}),(0,r.jsx)(s.th,{children:"Description"}),(0,r.jsx)(s.th,{children:"Example Value(s)"}),(0,r.jsx)(s.th,{children:"Required?"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Title"})}),(0,r.jsx)(s.td,{children:"The name of the game"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"Far Cry 6"}),", ",(0,r.jsx)(s.code,{children:"HITMAN 3"})]}),(0,r.jsx)(s.td,{children:"Yes"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Version"})}),(0,r.jsxs)(s.td,{children:["An optional version tag that must begin with a lowercase ",(0,r.jsx)(s.code,{children:"v"})]}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"(v1.0)"}),", ",(0,r.jsx)(s.code,{children:"(v1.224)"})," , N/A"]}),(0,r.jsx)(s.td,{children:"No"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"EarlyAccess"})}),(0,r.jsx)(s.td,{children:"An optional tag that indicates whether the game is in Early Access"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"(EA)"}),", N/A"]}),(0,r.jsx)(s.td,{children:"No"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"GameType"})}),(0,r.jsxs)(s.td,{children:["Override for the games type. ",(0,r.jsx)(s.a,{href:"/docs/server-docs/game-types",children:"See here."})]}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"(W_P)"}),", ",(0,r.jsx)(s.code,{children:"(W_S)"}),", ",(0,r.jsx)(s.code,{children:"..."})," , N/A"]}),(0,r.jsx)(s.td,{children:"No"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"NoCache"})}),(0,r.jsx)(s.td,{children:'An optional "NO CACHE"-flag that prevents the server searching for this game on external videogame databases.'}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"(NC)"}),", N/A"]}),(0,r.jsx)(s.td,{children:"No"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"ReleaseYear"})}),(0,r.jsx)(s.td,{children:"The year of the game's release, for accurate detection"}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"(2021)"}),", ",(0,r.jsx)(s.code,{children:"(2019)"}),", N/A"]}),(0,r.jsx)(s.td,{children:"No"})]})]})]}),"\n",(0,r.jsx)(s.p,{children:"Here's an example of a file that follows this convention:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.code,{children:"Far Cry 6 (v1.5.0) (2021).zip"})}),"\n",(0,r.jsx)(s.p,{children:"By following this naming convention and using the common values listed in the table above, you can ensure that your games are detected correctly by GameVault."}),"\n",(0,r.jsx)(s.admonition,{title:"Illegal Filenames and Characters",type:"warning",children:(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["File names must not contain the following characters: ",(0,r.jsx)(s.code,{children:"/"}),", ",(0,r.jsx)(s.code,{children:"<"}),", ",(0,r.jsx)(s.code,{children:">"}),", ",(0,r.jsx)(s.code,{children:":"}),", ",(0,r.jsx)(s.code,{children:'"'}),", ",(0,r.jsx)(s.code,{children:"\\"}),", ",(0,r.jsx)(s.code,{children:"|"}),", ",(0,r.jsx)(s.code,{children:"?"}),", and ",(0,r.jsx)(s.code,{children:"*"}),". Replace these problematic characters with appropriate ones to ensure compatibility across all systems."]}),"\n",(0,r.jsx)(s.li,{children:"Avoid ending file names with spaces or dots."}),"\n",(0,r.jsxs)(s.li,{children:["Avoid using text within Round brackets such as ",(0,r.jsx)(s.code,{children:"(GOTY)"})," in your file names, as GameVault will remove them. Round brackets are reserved for the different flags mentioned above. Use square brackets instead: ",(0,r.jsx)(s.code,{children:"[GOTY]"})]}),"\n",(0,r.jsxs)(s.li,{children:["Do not use reserved file names such as ",(0,r.jsx)(s.code,{children:"CON"}),", ",(0,r.jsx)(s.code,{children:"PRN"}),", ",(0,r.jsx)(s.code,{children:"AUX"}),", ",(0,r.jsx)(s.code,{children:"NUL"}),", ",(0,r.jsx)(s.code,{children:"COM(1-9)"}),", ",(0,r.jsx)(s.code,{children:"LPT(1-9)"}),", etc."]}),"\n",(0,r.jsxs)(s.li,{children:["Avoid using multiple chained extensions like ",(0,r.jsx)(s.code,{children:".tar.gz"})," or ",(0,r.jsx)(s.code,{children:".tar.bz2"}),". Instead, use only the last extension like ",(0,r.jsx)(s.code,{children:".gz"})," or ",(0,r.jsx)(s.code,{children:".bz2"}),"."]}),"\n"]})}),"\n",(0,r.jsx)(s.h3,{id:"other-examples",children:"Other Examples"}),"\n",(0,r.jsx)(s.p,{children:"Here are some other valid examples of game names that follow the naming convention:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Star Wars Jedi - Fallen Order(v1.0.10.0) (2019).zip"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"HITMAN 3 (v3.10.1) (2021).7z"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"The Wandering Village (v0.1.32) (EA) (2022).iso"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Saints Row (W_S) (2022).zip"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"My personal IndieGame (v1.2.9) (NC) (2018).zip"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Stray (2022).7z"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Captain of Industry (v0.4.12b) (EA) (2022).gz"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"Minecraft (2011).exe"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,d.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8358:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>c});var r=n(5271);const d={},i=r.createContext(d);function c(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:c(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61be0f73.a65020c4.js b/assets/js/61be0f73.a65020c4.js new file mode 100644 index 000000000..be53adb09 --- /dev/null +++ b/assets/js/61be0f73.a65020c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3555],{3749:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"server-docs/structure","title":"File and Folder Structure","description":"If you want to set up a GameVault Server, you need to pay attention to the file and folder structure.","source":"@site/docs/server-docs/structure.md","sourceDirName":"server-docs","slug":"/server-docs/structure","permalink":"/docs/server-docs/structure","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/structure.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docs","previous":{"title":"Configuration","permalink":"/docs/server-docs/configuration"},"next":{"title":"Game Types","permalink":"/docs/server-docs/game-types"}}');var d=n(6070),i=n(8591);const c={sidebar_position:2},t="File and Folder Structure",l={},o=[{value:"Supported Archive Formats",id:"supported-archive-formats",level:2},{value:"Single File Executable",id:"single-file-executable",level:3},{value:"Naming Convention for Games",id:"naming-convention-for-games",level:2},{value:"Other Examples",id:"other-examples",level:3}];function a(e){const s={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.header,{children:(0,d.jsx)(s.h1,{id:"file-and-folder-structure",children:"File and Folder Structure"})}),"\n",(0,d.jsxs)(s.p,{children:["If you want to set up a GameVault Server, you need to pay attention to the file and folder structure.\nThe volume mapped to the ",(0,d.jsx)(s.code,{children:"/files"})," directory must contain your games. These games must be named correctly and should either be archived in one of the supported archive formats listed below or be a single-file executable as described below to be accurately detected by GameVault."]}),"\n",(0,d.jsx)(s.h2,{id:"supported-archive-formats",children:"Supported Archive Formats"}),"\n",(0,d.jsx)(s.p,{children:"GameVault supports all file formats 7zip 23.01 (2023-06-20) does:"}),"\n",(0,d.jsxs)(s.p,{children:[(0,d.jsx)(s.code,{children:".7z"})," ",(0,d.jsx)(s.code,{children:".xz"})," ",(0,d.jsx)(s.code,{children:".bz2"})," ",(0,d.jsx)(s.code,{children:".gz"})," ",(0,d.jsx)(s.code,{children:".tar"})," ",(0,d.jsx)(s.code,{children:".zip"})," ",(0,d.jsx)(s.code,{children:".wim"})," ",(0,d.jsx)(s.code,{children:".ar"})," ",(0,d.jsx)(s.code,{children:".arj"})," ",(0,d.jsx)(s.code,{children:".cab"})," ",(0,d.jsx)(s.code,{children:".chm"})," ",(0,d.jsx)(s.code,{children:".cpio"})," ",(0,d.jsx)(s.code,{children:".cramfs"})," ",(0,d.jsx)(s.code,{children:".dmg"})," ",(0,d.jsx)(s.code,{children:".ext"})," ",(0,d.jsx)(s.code,{children:".fat"})," ",(0,d.jsx)(s.code,{children:".gpt"})," ",(0,d.jsx)(s.code,{children:".hfs"})," ",(0,d.jsx)(s.code,{children:".ihex"})," ",(0,d.jsx)(s.code,{children:".iso"})," ",(0,d.jsx)(s.code,{children:".lzh"})," ",(0,d.jsx)(s.code,{children:".lzma"})," ",(0,d.jsx)(s.code,{children:".mbr"})," ",(0,d.jsx)(s.code,{children:".msi"})," ",(0,d.jsx)(s.code,{children:".nsis"})," ",(0,d.jsx)(s.code,{children:".ntfs"})," ",(0,d.jsx)(s.code,{children:".qcow2"})," ",(0,d.jsx)(s.code,{children:".rar"})," ",(0,d.jsx)(s.code,{children:".rpm"})," ",(0,d.jsx)(s.code,{children:".squashfs"})," ",(0,d.jsx)(s.code,{children:".udf"})," ",(0,d.jsx)(s.code,{children:".uefi"})," ",(0,d.jsx)(s.code,{children:".vdi"})," ",(0,d.jsx)(s.code,{children:".vhd"})," ",(0,d.jsx)(s.code,{children:".vmdk"})," ",(0,d.jsx)(s.code,{children:".wim"})," ",(0,d.jsx)(s.code,{children:".xar"})," ",(0,d.jsx)(s.code,{children:".z"})]}),"\n",(0,d.jsx)(s.h3,{id:"single-file-executable",children:"Single File Executable"}),"\n",(0,d.jsxs)(s.p,{children:["We recommend ",(0,d.jsx)(s.a,{href:"#supported-archive-formats",children:"archiving games"})," to save storage and bandwidth. However, if the game is just a single file executable, like ",(0,d.jsx)(s.code,{children:"setup_game.exe"})," or ",(0,d.jsx)(s.code,{children:"setup_game.sh"}),", you can import it into GameVault without archiving. Just be sure to rename it as described below for compatibility with GameVault (e.g. ",(0,d.jsx)(s.code,{children:"Minecraft (v1.12) (2011).exe"}),"). By default, GameVault autodetects the ",(0,d.jsx)(s.a,{href:"/docs/server-docs/game-types",children:"game type"}),' of single-file executables as a setup-type game. In rare cases, games can be single portable executables without additional setup. If that\'s the case, make sure to mark the games as "Portable" using the type override.']}),"\n",(0,d.jsxs)(s.p,{children:["Supported Executables:",(0,d.jsx)(s.br,{}),"\n",(0,d.jsx)(s.code,{children:".exe"})," ",(0,d.jsx)(s.code,{children:".sh"})]}),"\n",(0,d.jsx)(s.admonition,{title:"Downloading single-file executables",type:"note",children:(0,d.jsxs)(s.p,{children:["Single-file executables are packed into a ",(0,d.jsx)(s.code,{children:".tar"})," file (no compression) and cached in the server's ",(0,d.jsx)(s.code,{children:"/tmp"})," folder on-the-fly when users download them, to make them compatible with the GameVault Client. The cached files are reused until deleted by a Server Restart."]})}),"\n",(0,d.jsx)(s.h2,{id:"naming-convention-for-games",children:"Naming Convention for Games"}),"\n",(0,d.jsx)(s.p,{children:"The name of each game file must follow this format:"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.code,{children:"Title (Version) (EarlyAccess) (GameType) (NoCache) (ReleaseYear).zip"})}),"\n",(0,d.jsxs)(s.p,{children:["Note that the parentheses must be included, and the naming convention is ",(0,d.jsx)(s.strong,{children:"case sensitive"}),"."]}),"\n",(0,d.jsx)(s.p,{children:"Here's an explanation of each part of the naming convention:"}),"\n",(0,d.jsxs)(s.table,{children:[(0,d.jsx)(s.thead,{children:(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.th,{children:"Part"}),(0,d.jsx)(s.th,{children:"Description"}),(0,d.jsx)(s.th,{children:"Example Value(s)"}),(0,d.jsx)(s.th,{children:"Required?"})]})}),(0,d.jsxs)(s.tbody,{children:[(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.strong,{children:"Title"})}),(0,d.jsx)(s.td,{children:"The name of the game"}),(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"Far Cry 6"}),", ",(0,d.jsx)(s.code,{children:"HITMAN 3"})]}),(0,d.jsx)(s.td,{children:"Yes"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.strong,{children:"Version"})}),(0,d.jsxs)(s.td,{children:["An optional version tag that must begin with a lowercase ",(0,d.jsx)(s.code,{children:"v"})]}),(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"(v1.0)"}),", ",(0,d.jsx)(s.code,{children:"(v1.224)"})," , N/A"]}),(0,d.jsx)(s.td,{children:"No"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.strong,{children:"EarlyAccess"})}),(0,d.jsx)(s.td,{children:"An optional tag that indicates whether the game is in Early Access"}),(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"(EA)"}),", N/A"]}),(0,d.jsx)(s.td,{children:"No"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.strong,{children:"GameType"})}),(0,d.jsxs)(s.td,{children:["Override for the games type. ",(0,d.jsx)(s.a,{href:"/docs/server-docs/game-types",children:"See here."})]}),(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"(W_P)"}),", ",(0,d.jsx)(s.code,{children:"(W_S)"}),", ",(0,d.jsx)(s.code,{children:"..."})," , N/A"]}),(0,d.jsx)(s.td,{children:"No"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.strong,{children:"NoCache"})}),(0,d.jsx)(s.td,{children:'An optional "NO CACHE"-flag that prevents the server searching for this game on external videogame databases.'}),(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"(NC)"}),", N/A"]}),(0,d.jsx)(s.td,{children:"No"})]}),(0,d.jsxs)(s.tr,{children:[(0,d.jsx)(s.td,{children:(0,d.jsx)(s.strong,{children:"ReleaseYear"})}),(0,d.jsx)(s.td,{children:"The year of the game's release, for accurate detection"}),(0,d.jsxs)(s.td,{children:[(0,d.jsx)(s.code,{children:"(2021)"}),", ",(0,d.jsx)(s.code,{children:"(2019)"}),", N/A"]}),(0,d.jsx)(s.td,{children:"No"})]})]})]}),"\n",(0,d.jsx)(s.p,{children:"Here's an example of a file that follows this convention:"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.code,{children:"Far Cry 6 (v1.5.0) (2021).zip"})}),"\n",(0,d.jsx)(s.p,{children:"By following this naming convention and using the common values listed in the table above, you can ensure that your games are detected correctly by GameVault."}),"\n",(0,d.jsx)(s.admonition,{title:"Illegal Filenames and Characters",type:"warning",children:(0,d.jsxs)(s.ul,{children:["\n",(0,d.jsxs)(s.li,{children:["File names must not contain the following characters: ",(0,d.jsx)(s.code,{children:"/"}),", ",(0,d.jsx)(s.code,{children:"<"}),", ",(0,d.jsx)(s.code,{children:">"}),", ",(0,d.jsx)(s.code,{children:":"}),", ",(0,d.jsx)(s.code,{children:'"'}),", ",(0,d.jsx)(s.code,{children:"\\"}),", ",(0,d.jsx)(s.code,{children:"|"}),", ",(0,d.jsx)(s.code,{children:"?"}),", and ",(0,d.jsx)(s.code,{children:"*"}),". Replace these problematic characters with appropriate ones to ensure compatibility across all systems."]}),"\n",(0,d.jsx)(s.li,{children:"Avoid ending file names with spaces or dots."}),"\n",(0,d.jsxs)(s.li,{children:["Avoid using text within Round brackets such as ",(0,d.jsx)(s.code,{children:"(GOTY)"})," in your file names, as GameVault will remove them. Round brackets are reserved for the different flags mentioned above. Use square brackets instead: ",(0,d.jsx)(s.code,{children:"[GOTY]"})]}),"\n",(0,d.jsxs)(s.li,{children:["Do not use reserved file names such as ",(0,d.jsx)(s.code,{children:"CON"}),", ",(0,d.jsx)(s.code,{children:"PRN"}),", ",(0,d.jsx)(s.code,{children:"AUX"}),", ",(0,d.jsx)(s.code,{children:"NUL"}),", ",(0,d.jsx)(s.code,{children:"COM(1-9)"}),", ",(0,d.jsx)(s.code,{children:"LPT(1-9)"}),", etc."]}),"\n",(0,d.jsxs)(s.li,{children:["Avoid using multiple chained extensions like ",(0,d.jsx)(s.code,{children:".tar.gz"})," or ",(0,d.jsx)(s.code,{children:".tar.bz2"}),". Instead, use only the last extension like ",(0,d.jsx)(s.code,{children:".gz"})," or ",(0,d.jsx)(s.code,{children:".bz2"}),"."]}),"\n"]})}),"\n",(0,d.jsx)(s.h3,{id:"other-examples",children:"Other Examples"}),"\n",(0,d.jsx)(s.p,{children:"Here are some other valid examples of game names that follow the naming convention:"}),"\n",(0,d.jsxs)(s.ul,{children:["\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"Star Wars Jedi - Fallen Order(v1.0.10.0) (2019).zip"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"HITMAN 3 (v3.10.1) (2021).7z"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"The Wandering Village (v0.1.32) (EA) (2022).iso"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"Saints Row (W_S) (2022).zip"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"My personal IndieGame (v1.2.9) (NC) (2018).zip"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"Stray (2022).7z"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"Captain of Industry (v0.4.12b) (EA) (2022).gz"})}),"\n",(0,d.jsx)(s.li,{children:(0,d.jsx)(s.code,{children:"Minecraft (2011).exe"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,d.jsx)(s,{...e,children:(0,d.jsx)(a,{...e})}):a(e)}},8591:(e,s,n)=>{n.d(s,{R:()=>c,x:()=>t});var r=n(758);const d={},i=r.createContext(d);function c(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:c(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/621db11d.b88f6c61.js b/assets/js/621db11d.b88f6c61.js new file mode 100644 index 000000000..6bb52fe48 --- /dev/null +++ b/assets/js/621db11d.b88f6c61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4212],{2336:(t,e,s)=>{s.r(e),s.d(e,{default:()=>m});s(758);var a=s(3526),o=s(5003),r=s(8539),l=s(2737),u=s(8777),n=s(4981),i=s(8038),c=s(5582);const h={authorListItem:"authorListItem_EZJ8"};var g=s(6070);function p(t){let{author:e}=t;return(0,g.jsx)("li",{className:h.authorListItem,children:(0,g.jsx)(c.A,{as:"h2",author:e,count:e.count})})}function d(t){let{authors:e}=t;return(0,g.jsx)("section",{className:(0,a.A)("margin-vert--lg",h.authorsListSection),children:(0,g.jsx)("ul",{children:e.map((t=>(0,g.jsx)(p,{author:t},t.key)))})})}function m(t){let{authors:e,sidebar:s}=t;const c=(0,l.uz)();return(0,g.jsxs)(o.e3,{className:(0,a.A)(r.G.wrapper.blogPages,r.G.page.blogAuthorsListPage),children:[(0,g.jsx)(o.be,{title:c}),(0,g.jsx)(n.A,{tag:"blog_authors_list"}),(0,g.jsxs)(u.A,{sidebar:s,children:[(0,g.jsx)(i.A,{as:"h1",children:c}),(0,g.jsx)(d,{authors:e})]})]})}},2737:(t,e,s)=>{s.d(e,{ZD:()=>l,uz:()=>u});s(758);var a=s(8072),o=s(7773);s(6070);function r(){const{selectMessage:t}=(0,o.W)();return e=>t(e,(0,a.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:e}))}function l(t){const e=r();return(0,a.T)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:e(t.count),tagName:t.label})}const u=()=>(0,a.T)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"})}}]); \ No newline at end of file diff --git a/assets/js/621db11d.cd005c05.js b/assets/js/621db11d.cd005c05.js deleted file mode 100644 index 8f2a94293..000000000 --- a/assets/js/621db11d.cd005c05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3940],{3435:(t,e,s)=>{s.r(e),s.d(e,{default:()=>m});s(5271);var a=s(4814),o=s(9967),r=s(3509),l=s(5535),u=s(6566),n=s(8625),i=s(3221),c=s(8059);const h={authorListItem:"authorListItem_X3Ma"};var g=s(2676);function d(t){let{author:e}=t;return(0,g.jsx)("li",{className:h.authorListItem,children:(0,g.jsx)(c.Z,{as:"h2",author:e,count:e.count})})}function p(t){let{authors:e}=t;return(0,g.jsx)("section",{className:(0,a.Z)("margin-vert--lg",h.authorsListSection),children:(0,g.jsx)("ul",{children:e.map((t=>(0,g.jsx)(d,{author:t},t.key)))})})}function m(t){let{authors:e,sidebar:s}=t;const c=(0,l.HV)();return(0,g.jsxs)(o.FG,{className:(0,a.Z)(r.k.wrapper.blogPages,r.k.page.blogAuthorsListPage),children:[(0,g.jsx)(o.d,{title:c}),(0,g.jsx)(n.Z,{tag:"blog_authors_list"}),(0,g.jsxs)(u.Z,{sidebar:s,children:[(0,g.jsx)(i.Z,{as:"h1",children:c}),(0,g.jsx)(p,{authors:e})]})]})}},5535:(t,e,s)=>{s.d(e,{HV:()=>u,Wi:()=>l});s(5271);var a=s(2922),o=s(2351);s(2676);function r(){const{selectMessage:t}=(0,o.c)();return e=>t(e,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:e}))}function l(t){const e=r();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:e(t.count),tagName:t.label})}const u=()=>(0,a.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"})}}]); \ No newline at end of file diff --git a/assets/js/63511f3c.6756bb7e.js b/assets/js/63511f3c.2be0e358.js similarity index 84% rename from assets/js/63511f3c.6756bb7e.js rename to assets/js/63511f3c.2be0e358.js index f00517b7e..3f23fe38f 100644 --- a/assets/js/63511f3c.6756bb7e.js +++ b/assets/js/63511f3c.2be0e358.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5044],{7337:a=>{a.exports=JSON.parse('{"tag":{"label":"decision-making","permalink":"/blog/tags/decision-making","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/decision-making","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2671],{6735:a=>{a.exports=JSON.parse('{"tag":{"label":"decision-making","permalink":"/blog/tags/decision-making","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/decision-making","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/63b46e50.16d610c4.js b/assets/js/63b46e50.78dbdbbc.js similarity index 85% rename from assets/js/63b46e50.16d610c4.js rename to assets/js/63b46e50.78dbdbbc.js index d9cd89126..d1bea74f2 100644 --- a/assets/js/63b46e50.16d610c4.js +++ b/assets/js/63b46e50.78dbdbbc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4819],{4881:a=>{a.exports=JSON.parse('{"tag":{"label":"health monitoring","permalink":"/blog/tags/health-monitoring","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/health-monitoring","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3328],{4062:a=>{a.exports=JSON.parse('{"tag":{"label":"health monitoring","permalink":"/blog/tags/health-monitoring","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/health-monitoring","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6493.8f62fe69.js b/assets/js/6493.8f62fe69.js deleted file mode 100644 index 15f2b6a20..000000000 --- a/assets/js/6493.8f62fe69.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6493],{44:(e,t,n)=>{"use strict";n.d(t,{Z:()=>_});var s=n(5271),a=n(2676);function o(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:o.length>0?(0,a.jsx)(a.Fragment,{children:o}):null}}(e.children),o=e.title??t;return{...e,...o&&{title:o},children:n}}var c=n(4814),i=n(2922),r=n(3509);const l={admonition:"admonition_HAC_",admonitionHeading:"admonitionHeading_VCVJ",admonitionIcon:"admonitionIcon_vHBt",admonitionContent:"admonitionContent_tuR2"};function d(e){let{type:t,className:n,children:s}=e;return(0,a.jsx)("div",{className:(0,c.Z)(r.k.common.admonition,r.k.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,a.jsxs)("div",{className:l.admonitionHeading,children:[(0,a.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,a.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:o,className:c}=e;return(0,a.jsxs)(d,{type:t,className:c,children:[s||n?(0,a.jsx)(u,{title:s,icon:n}):null,(0,a.jsx)(m,{children:o})]})}function p(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,a.jsx)(p,{}),title:(0,a.jsx)(i.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function g(e){return(0,a.jsx)(h,{...f,...e,className:(0,c.Z)("alert alert--secondary",e.className),children:e.children})}function x(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const j={icon:(0,a.jsx)(x,{}),title:(0,a.jsx)(i.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,a.jsx)(h,{...j,...e,className:(0,c.Z)("alert alert--success",e.className),children:e.children})}function v(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const y={icon:(0,a.jsx)(v,{}),title:(0,a.jsx)(i.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function N(e){return(0,a.jsx)(h,{...y,...e,className:(0,c.Z)("alert alert--info",e.className),children:e.children})}function k(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const C={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(i.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function B(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,a.jsx)(B,{}),title:(0,a.jsx)(i.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const Z={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(i.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const L={...{note:g,tip:b,info:N,warning:function(e){return(0,a.jsx)(h,{...C,...e,className:(0,c.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(h,{...w,...e,className:(0,c.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(g,{title:"secondary",...e}),important:e=>(0,a.jsx)(N,{title:"important",...e}),success:e=>(0,a.jsx)(b,{title:"success",...e}),caution:function(e){return(0,a.jsx)(h,{...Z,...e,className:(0,c.Z)("alert alert--warning",e.className),children:e.children})}}};function _(e){const t=o(e),n=(s=t.type,L[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),L.info));var s;return(0,a.jsx)(n,{...t})}},3362:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});n(5271);var s=n(4814),a=n(2922),o=n(3509),c=n(6527);const i={iconEdit:"iconEdit_BjJv"};var r=n(2676);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)(i.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(c.Z,{to:t,className:o.k.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(1956);function m(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=(0,u.P)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,r.jsx)(a.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,r.jsx)(a.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:t})},children:" by {user}"})}function p(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,r.jsxs)("span",{className:o.k.common.lastUpdated,children:[(0,r.jsx)(a.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,r.jsx)(m,{lastUpdatedAt:t}):"",byUser:n?(0,r.jsx)(h,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const f={lastUpdated:"lastUpdated_w0Sh"};function g(e){let{className:t,editUrl:n,lastUpdatedAt:a,lastUpdatedBy:o}=e;return(0,r.jsxs)("div",{className:(0,s.Z)("row",t),children:[(0,r.jsx)("div",{className:"col",children:n&&(0,r.jsx)(d,{editUrl:n})}),(0,r.jsx)("div",{className:(0,s.Z)("col",f.lastUpdated),children:(a||o)&&(0,r.jsx)(p,{lastUpdatedAt:a,lastUpdatedBy:o})})]})}},2714:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ie});var s=n(5271),a=n(8358),o=n(2791),c=n(6594),i=n(4814),r=n(7934),l=n(9364);function d(){const{prism:e}=(0,l.L)(),{colorMode:t}=(0,r.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(3509),m=n(7226),h=n.n(m);const p=/title=(? ["'])(?.*?)\1/,f=/\{(? [\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},x={...g,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},j=Object.keys(g);function b(e,t){const n=e.map((e=>{const{start:n,end:s}=x[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:o}=t;if(o&&f.test(o)){const e=o.match(f).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return b(["tex"],t);case"lua":case"haskell":case"sql":return b(["lua"],t);case"wasm":return b(["wasm"],t);case"vb":case"vba":case"visual-basic":return b(["vb","rem"],t);case"vbnet":return b(["vbnet","rem"],t);case"batch":return b(["rem"],t);case"basic":return b(["rem","f90"],t);case"fsharp":return b(["js","ml"],t);case"ocaml":case"sml":return b(["ml"],t);case"fortran":return b(["f90"],t);case"cobol":return b(["cobol"],t);default:return b(j,t)}}(s,a),i=n.split("\n"),r=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const y={codeBlockContainer:"codeBlockContainer_Sx4Y"};var N=n(2676);function k(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const o=t[s];o&&"string"==typeof a&&(n[o]=a)})),n}(d());return(0,N.jsx)(t,{...n,style:s,className:(0,i.Z)(n.className,y.codeBlockContainer,u.k.common.codeBlock)})}const C={codeBlockContent:"codeBlockContent_YnoF",codeBlockTitle:"codeBlockTitle_CurW",codeBlock:"codeBlock_kXdi",codeBlockStandalone:"codeBlockStandalone_Yei0",codeBlockLines:"codeBlockLines_SDaA",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_Akw7",buttonGroup:"buttonGroup_zCn6"};function B(e){let{children:t,className:n}=e;return(0,N.jsx)(k,{as:"pre",tabIndex:0,className:(0,i.Z)(C.codeBlockStandalone,"thin-scrollbar",n),children:(0,N.jsx)("code",{className:C.codeBlockLines,children:t})})}var w=n(8274);const Z={attributes:!0,characterData:!0,childList:!0,subtree:!0};function L(e,t){const[n,a]=(0,s.useState)(),o=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n){void 0===n&&(n=Z);const a=(0,w.zX)(t),o=(0,w.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,o),()=>t.disconnect()}),[e,a,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var _=n(739);const E={codeLine:"codeLine_myqu",codeLineNumber:"codeLineNumber_CBT2",codeLineContent:"codeLineContent_LM40"};function T(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:o}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=a({line:t,className:(0,i.Z)(n,s&&E.codeLine)}),r=t.map(((e,t)=>(0,N.jsx)("span",{...o({token:e})},t)));return(0,N.jsxs)("span",{...c,children:[s?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)("span",{className:E.codeLineNumber}),(0,N.jsx)("span",{className:E.codeLineContent,children:r})]}):r,(0,N.jsx)("br",{})]})}var A=n(2922);function I(e){return(0,N.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,N.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function S(e){return(0,N.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,N.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const U={copyButtonCopied:"copyButtonCopied_OQHi",copyButtonIcons:"copyButtonIcons_wv7r",copyButtonIcon:"copyButtonIcon_Yg7_",copyButtonSuccessIcon:"copyButtonSuccessIcon_PaDN"};function M(e){let{code:t,className:n}=e;const[a,o]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),a=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const o=document.getSelection(),c=o.rangeCount>0&&o.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),c&&(o.removeAllRanges(),o.addRange(c)),a&&a.focus()}(t),o(!0),c.current=window.setTimeout((()=>{o(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,N.jsx)("button",{type:"button","aria-label":a?(0,A.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,A.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,A.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,U.copyButton,a&&U.copyButtonCopied),onClick:r,children:(0,N.jsxs)("span",{className:U.copyButtonIcons,"aria-hidden":"true",children:[(0,N.jsx)(I,{className:U.copyButtonIcon}),(0,N.jsx)(S,{className:U.copyButtonSuccessIcon})]})})}function z(e){return(0,N.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,N.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const H={wordWrapButtonIcon:"wordWrapButtonIcon_dvG6",wordWrapButtonEnabled:"wordWrapButtonEnabled_EI91"};function R(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,A.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,N.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,s&&H.wordWrapButtonEnabled),"aria-label":a,title:a,children:(0,N.jsx)(z,{className:H.wordWrapButtonIcon,"aria-hidden":"true"})})}function W(e){let{children:t,className:n="",metastring:a,title:o,showLineNumbers:c,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.L)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");a(n)}),[o]);return L(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(a)||o,{lineClassNames:j,code:b}=v(t,{metastring:a,language:h,magicComments:m}),y=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,N.jsxs)(k,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,N.jsx)("div",{className:C.codeBlockTitle,children:x}),(0,N.jsxs)("div",{className:C.codeBlockContent,children:[(0,N.jsx)(_.y$,{theme:f,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:o}=e;return(0,N.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.Z)(t,C.codeBlock,"thin-scrollbar"),style:n,children:(0,N.jsx)("code",{className:(0,i.Z)(C.codeBlockLines,y&&C.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,N.jsx)(T,{line:e,getLineProps:a,getTokenProps:o,classNames:j[t],showLineNumbers:y},t)))})})}}),(0,N.jsxs)("div",{className:C.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,N.jsx)(R,{className:C.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,N.jsx)(M,{className:C.codeButton,code:b})]})]})]})}function D(e){let{children:t,...n}=e;const a=(0,c.Z)(),o=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof o?W:B;return(0,N.jsx)(i,{...n,children:o},String(a))}function V(e){return(0,N.jsx)("code",{...e})}var $=n(6527);var P=n(4167),O=n(3955);const q={details:"details_UM4U",isBrowser:"isBrowser_HuuV",collapsibleContent:"collapsibleContent_IfUm"};function F(e){return!!e&&("SUMMARY"===e.tagName||F(e.parentElement))}function Y(e,t){return!!e&&(e===t||Y(e.parentElement,t))}function G(e){let{summary:t,children:n,...a}=e;(0,P.Z)().collectAnchor(a.id);const o=(0,c.Z)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,O.u)({initialState:!a.open}),[u,m]=(0,s.useState)(a.open),h=s.isValidElement(t)?t:(0,N.jsx)("summary",{children:t??"Details"});return(0,N.jsxs)("details",{...a,ref:r,open:u,"data-collapsed":l,className:(0,i.Z)(q.details,o&&q.isBrowser,a.className),onMouseDown:e=>{F(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;F(t)&&Y(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,N.jsx)(O.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,N.jsx)("div",{className:q.collapsibleContent,children:n})})]})}const X={details:"details_MhMj"},Q="alert alert--info";function J(e){let{...t}=e;return(0,N.jsx)(G,{...t,className:(0,i.Z)(Q,X.details,t.className)})}function K(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,N.jsx)(N.Fragment,{children:t.filter((e=>e!==n))});return(0,N.jsx)(J,{...e,summary:n,children:a})}var ee=n(3221);function te(e){return(0,N.jsx)(ee.Z,{...e})}const ne={containsTaskList:"containsTaskList_Q9D7"};function se(e){if(void 0!==e)return(0,i.Z)(e,e?.includes("contains-task-list")&&ne.containsTaskList)}const ae={img:"img_sRsS"};var oe=n(44);const ce={Head:o.Z,details:K,Details:K,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,N.jsx)(V,{...e}):(0,N.jsx)(D,{...e})},a:function(e){return(0,N.jsx)($.Z,{...e})},pre:function(e){return(0,N.jsx)(N.Fragment,{children:e.children})},ul:function(e){return(0,N.jsx)("ul",{...e,className:se(e.className)})},li:function(e){return(0,P.Z)().collectAnchor(e.id),(0,N.jsx)("li",{...e})},img:function(e){return(0,N.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,i.Z)(t,ae.img))});var t},h1:e=>(0,N.jsx)(te,{as:"h1",...e}),h2:e=>(0,N.jsx)(te,{as:"h2",...e}),h3:e=>(0,N.jsx)(te,{as:"h3",...e}),h4:e=>(0,N.jsx)(te,{as:"h4",...e}),h5:e=>(0,N.jsx)(te,{as:"h5",...e}),h6:e=>(0,N.jsx)(te,{as:"h6",...e}),admonition:oe.Z,mermaid:()=>null};function ie(e){let{children:t}=e;return(0,N.jsx)(a.Z,{components:ce,children:t})}},5066:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(5271);var s=n(4814),a=n(6527),o=n(2676);function c(e){const{permalink:t,title:n,subLabel:c,isNext:i}=e;return(0,o.jsxs)(a.Z,{className:(0,s.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,o.jsx)("div",{className:"pagination-nav__label",children:n})]})}},8213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(5271);var s=n(4814),a=n(6527);const o={tag:"tag_idh4",tagRegular:"tagRegular_OEC8",tagWithCount:"tagWithCount_X4qa"};var c=n(2676);function i(e){let{permalink:t,label:n,count:i,description:r}=e;return(0,c.jsxs)(a.Z,{href:t,title:r,className:(0,s.Z)(o.tag,i?o.tagWithCount:o.tagRegular),children:[n,i&&(0,c.jsx)("span",{children:i})]})}},9813:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});n(5271);var s=n(4814),a=n(2922),o=n(8213);const c={tags:"tags_gbum",tag:"tag_jXtk"};var i=n(2676);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(a.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.Z)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,i.jsx)("li",{className:c.tag,children:(0,i.jsx)(o.Z,{...e})},e.permalink)))})]})}},1956:(e,t,n)=>{"use strict";n.d(t,{P:()=>a});var s=n(6172);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.Z)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}},7226:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,o]=t;if(s&&o){s=parseInt(s),o=parseInt(o);const e=s {"use strict";n.d(t,{Z:()=>i,a:()=>c});var s=n(5271);const a={},o=s.createContext(a);function c(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6535206c.1433f29b.js b/assets/js/6535206c.1433f29b.js new file mode 100644 index 000000000..91c39d0b1 --- /dev/null +++ b/assets/js/6535206c.1433f29b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[295],{7140:a=>{a.exports=JSON.parse('{"tag":{"label":"app name migration","permalink":"/blog/tags/app-name-migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/app-name-migration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6535206c.8d92d0fd.js b/assets/js/6535206c.8d92d0fd.js deleted file mode 100644 index b839a898b..000000000 --- a/assets/js/6535206c.8d92d0fd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3020],{3480:a=>{a.exports=JSON.parse('{"tag":{"label":"app name migration","permalink":"/blog/tags/app-name-migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/app-name-migration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/66e9ef90.493eaccb.js b/assets/js/66e9ef90.86179459.js similarity index 84% rename from assets/js/66e9ef90.493eaccb.js rename to assets/js/66e9ef90.86179459.js index 1812d0bf5..80cd82df8 100644 --- a/assets/js/66e9ef90.493eaccb.js +++ b/assets/js/66e9ef90.86179459.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[786],{9746:a=>{a.exports=JSON.parse('{"tag":{"label":"analytics","permalink":"/blog/tags/analytics","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/analytics","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[791],{2744:a=>{a.exports=JSON.parse('{"tag":{"label":"analytics","permalink":"/blog/tags/analytics","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/analytics","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/678c8d60.d2ce53e5.js b/assets/js/678c8d60.b80b1c72.js similarity index 84% rename from assets/js/678c8d60.d2ce53e5.js rename to assets/js/678c8d60.b80b1c72.js index e75dcb014..e884dbf19 100644 --- a/assets/js/678c8d60.d2ce53e5.js +++ b/assets/js/678c8d60.b80b1c72.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4430],{9939:e=>{e.exports=JSON.parse('{"tag":{"label":"DRM-free games","permalink":"/blog/tags/drm-free-games","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/drm-free-games","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9751],{7364:e=>{e.exports=JSON.parse('{"tag":{"label":"DRM-free games","permalink":"/blog/tags/drm-free-games","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/drm-free-games","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6875c492.3fc46bbb.js b/assets/js/6875c492.3fc46bbb.js new file mode 100644 index 000000000..48a6f9762 --- /dev/null +++ b/assets/js/6875c492.3fc46bbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4813],{6191:(e,t,n)=>{n.d(t,{A:()=>r});n(758);var s=n(8072),a=n(5336),i=n(6070);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.A,{permalink:n,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),r&&(0,i.jsx)(a.A,{permalink:r,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},8736:(e,t,n)=>{n.d(t,{A:()=>B});n(758);var s=n(3526),a=n(7073),i=n(6070);function r(e){let{children:t,className:n}=e;return(0,i.jsx)("article",{className:n,children:t})}var l=n(88);const o={title:"title_C9tp"};function c(e){let{className:t}=e;const{metadata:n,isBlogPostPage:r}=(0,a.e7)(),{permalink:c,title:d}=n,u=r?"h1":"h2";return(0,i.jsx)(u,{className:(0,s.A)(o.title,t),children:r?d:(0,i.jsx)(l.A,{to:c,children:d})})}var d=n(8072),u=n(7773),g=n(3886);const m={container:"container_eyWC"};function h(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=(0,u.W)();return t=>{const n=Math.ceil(t);return e(n,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:n}))}}();return(0,i.jsx)(i.Fragment,{children:n(t)})}function p(e){let{date:t,formattedDate:n}=e;return(0,i.jsx)("time",{dateTime:t,children:n})}function x(){return(0,i.jsx)(i.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:n}=(0,a.e7)(),{date:r,readingTime:l}=n,o=(0,g.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,i.jsxs)("div",{className:(0,s.A)(m.container,"margin-vert--md",t),children:[(0,i.jsx)(p,{date:r,formattedDate:(c=r,o.format(new Date(c)))}),void 0!==l&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(x,{}),(0,i.jsx)(h,{readingTime:l})]})]});var c}var b=n(5582);const f={authorCol:"authorCol_GZzj",imageOnlyAuthorRow:"imageOnlyAuthorRow_oXEi",imageOnlyAuthorCol:"imageOnlyAuthorCol_kgo0"};function A(e){let{className:t}=e;const{metadata:{authors:n},assets:r}=(0,a.e7)();if(0===n.length)return null;const l=n.every((e=>{let{name:t}=e;return!t})),o=1===n.length;return(0,i.jsx)("div",{className:(0,s.A)("margin-top--md margin-bottom--sm",l?f.imageOnlyAuthorRow:"row",t),children:n.map(((e,t)=>(0,i.jsx)("div",{className:(0,s.A)(!l&&(o?"col col--12":"col col--6"),l?f.imageOnlyAuthorCol:f.authorCol),children:(0,i.jsx)(b.A,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})},t)))})}function v(){return(0,i.jsxs)("header",{children:[(0,i.jsx)(c,{}),(0,i.jsx)(j,{}),(0,i.jsx)(A,{})]})}var T=n(3652),N=n(3416);function w(e){let{children:t,className:n}=e;const{isBlogPostPage:r}=(0,a.e7)();return(0,i.jsx)("div",{id:r?T.LU:void 0,className:(0,s.A)("markdown",n),children:(0,i.jsx)(N.A,{children:t})})}var y=n(8539),P=n(3739),k=n(7304);function U(){return(0,i.jsx)("b",{children:(0,i.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function R(e){const{blogPostTitle:t,...n}=e;return(0,i.jsx)(l.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...n,children:(0,i.jsx)(U,{})})}function _(){const{metadata:e,isBlogPostPage:t}=(0,a.e7)(),{tags:n,title:r,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,u=!t&&o,g=n.length>0;if(!(g||u||l))return null;if(t){const e=!!(l||d||c);return(0,i.jsxs)("footer",{className:"docusaurus-mt-lg",children:[g&&(0,i.jsx)("div",{className:(0,s.A)("row","margin-top--sm",y.G.blog.blogFooterEditMetaRow),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(k.A,{tags:n})})}),e&&(0,i.jsx)(P.A,{className:(0,s.A)("margin-top--sm",y.G.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,i.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[g&&(0,i.jsx)("div",{className:(0,s.A)("col",{"col--9":u}),children:(0,i.jsx)(k.A,{tags:n})}),u&&(0,i.jsx)("div",{className:(0,s.A)("col text--right",{"col--3":g}),children:(0,i.jsx)(R,{blogPostTitle:r,to:e.permalink})})]})}function B(e){let{children:t,className:n}=e;const l=function(){const{isBlogPostPage:e}=(0,a.e7)();return e?void 0:"margin-bottom--xl"}();return(0,i.jsxs)(r,{className:(0,s.A)(l,n),children:[(0,i.jsx)(v,{}),(0,i.jsx)(w,{children:t}),(0,i.jsx)(_,{})]})}},8098:(e,t,n)=>{n.d(t,{A:()=>r});n(758);var s=n(7073),a=n(8736),i=n(6070);function r(e){let{items:t,component:n=a.A}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.in,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},7711:(e,t,n)=>{n.r(t),n.d(t,{default:()=>b});n(758);var s=n(3526),a=n(8072),i=n(5003),r=n(8539),l=n(2737),o=n(88),c=n(8777),d=n(6191),u=n(4981),g=n(8098),m=n(6252),h=n(8038),p=n(6070);function x(e){let{tag:t}=e;const n=(0,l.ZD)(t);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(i.be,{title:n,description:t.description}),(0,p.jsx)(u.A,{tag:"blog_tags_posts"})]})}function j(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const r=(0,l.ZD)(t);return(0,p.jsxs)(c.A,{sidebar:s,children:[t.unlisted&&(0,p.jsx)(m.A,{}),(0,p.jsxs)("header",{className:"margin-bottom--xl",children:[(0,p.jsx)(h.A,{as:"h1",children:r}),t.description&&(0,p.jsx)("p",{children:t.description}),(0,p.jsx)(o.A,{href:t.allTagsPath,children:(0,p.jsx)(a.A,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,p.jsx)(g.A,{items:n}),(0,p.jsx)(d.A,{metadata:i})]})}function b(e){return(0,p.jsxs)(i.e3,{className:(0,s.A)(r.G.wrapper.blogPages,r.G.page.blogTagPostListPage),children:[(0,p.jsx)(x,{...e}),(0,p.jsx)(j,{...e})]})}},6252:(e,t,n)=>{n.d(t,{A:()=>c});n(758);var s=n(3526),a=n(384),i=n(8539),r=n(2683),l=n(6070);function o(e){let{className:t}=e;return(0,l.jsx)(r.A,{type:"caution",title:(0,l.jsx)(a.Rc,{}),className:(0,s.A)(t,i.G.common.unlistedBanner),children:(0,l.jsx)(a.Uh,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.AE,{}),(0,l.jsx)(o,{...e})]})}},2737:(e,t,n)=>{n.d(t,{ZD:()=>r,uz:()=>l});n(758);var s=n(8072),a=n(7773);n(6070);function i(){const{selectMessage:e}=(0,a.W)();return t=>e(t,(0,s.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}function r(e){const t=i();return(0,s.T)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}const l=()=>(0,s.T)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"})},384:(e,t,n)=>{n.d(t,{AE:()=>o,Rc:()=>r,TT:()=>d,Uh:()=>l,Yh:()=>c});n(758);var s=n(8072),a=n(950),i=n(6070);function r(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,i.jsx)(a.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.9307af78.js b/assets/js/6875c492.9307af78.js deleted file mode 100644 index 51ef52d54..000000000 --- a/assets/js/6875c492.9307af78.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8610],{3400:(e,t,n)=>{n.d(t,{Z:()=>r});n(5271);var s=n(2922),a=n(5066),i=n(2676);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),r&&(0,i.jsx)(a.Z,{permalink:r,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},9449:(e,t,n)=>{n.d(t,{Z:()=>B});n(5271);var s=n(4814),a=n(5023),i=n(2676);function r(e){let{children:t,className:n}=e;return(0,i.jsx)("article",{className:n,children:t})}var l=n(6527);const o={title:"title_c9tz"};function c(e){let{className:t}=e;const{metadata:n,isBlogPostPage:r}=(0,a.nO)(),{permalink:c,title:d}=n,u=r?"h1":"h2";return(0,i.jsx)(u,{className:(0,s.Z)(o.title,t),children:r?d:(0,i.jsx)(l.Z,{to:c,children:d})})}var d=n(2922),u=n(2351),g=n(1956);const m={container:"container_xAnX"};function h(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=(0,u.c)();return t=>{const n=Math.ceil(t);return e(n,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:n}))}}();return(0,i.jsx)(i.Fragment,{children:n(t)})}function p(e){let{date:t,formattedDate:n}=e;return(0,i.jsx)("time",{dateTime:t,children:n})}function x(){return(0,i.jsx)(i.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:n}=(0,a.nO)(),{date:r,readingTime:l}=n,o=(0,g.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,i.jsxs)("div",{className:(0,s.Z)(m.container,"margin-vert--md",t),children:[(0,i.jsx)(p,{date:r,formattedDate:(c=r,o.format(new Date(c)))}),void 0!==l&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(x,{}),(0,i.jsx)(h,{readingTime:l})]})]});var c}var b=n(8059);const f={authorCol:"authorCol_btVC",imageOnlyAuthorRow:"imageOnlyAuthorRow_fBnr",imageOnlyAuthorCol:"imageOnlyAuthorCol_Y2d8"};function Z(e){let{className:t}=e;const{metadata:{authors:n},assets:r}=(0,a.nO)();if(0===n.length)return null;const l=n.every((e=>{let{name:t}=e;return!t})),o=1===n.length;return(0,i.jsx)("div",{className:(0,s.Z)("margin-top--md margin-bottom--sm",l?f.imageOnlyAuthorRow:"row",t),children:n.map(((e,t)=>(0,i.jsx)("div",{className:(0,s.Z)(!l&&(o?"col col--12":"col col--6"),l?f.imageOnlyAuthorCol:f.authorCol),children:(0,i.jsx)(b.Z,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})},t)))})}function v(){return(0,i.jsxs)("header",{children:[(0,i.jsx)(c,{}),(0,i.jsx)(j,{}),(0,i.jsx)(Z,{})]})}var T=n(5678),N=n(2714);function w(e){let{children:t,className:n}=e;const{isBlogPostPage:r}=(0,a.nO)();return(0,i.jsx)("div",{id:r?T.uR:void 0,className:(0,s.Z)("markdown",n),children:(0,i.jsx)(N.Z,{children:t})})}var y=n(3509),P=n(3362),k=n(9813);function A(){return(0,i.jsx)("b",{children:(0,i.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function O(e){const{blogPostTitle:t,...n}=e;return(0,i.jsx)(l.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...n,children:(0,i.jsx)(A,{})})}function U(){const{metadata:e,isBlogPostPage:t}=(0,a.nO)(),{tags:n,title:r,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,u=!t&&o,g=n.length>0;if(!(g||u||l))return null;if(t){const e=!!(l||d||c);return(0,i.jsxs)("footer",{className:"docusaurus-mt-lg",children:[g&&(0,i.jsx)("div",{className:(0,s.Z)("row","margin-top--sm",y.k.blog.blogFooterEditMetaRow),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(k.Z,{tags:n})})}),e&&(0,i.jsx)(P.Z,{className:(0,s.Z)("margin-top--sm",y.k.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,i.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[g&&(0,i.jsx)("div",{className:(0,s.Z)("col",{"col--9":u}),children:(0,i.jsx)(k.Z,{tags:n})}),u&&(0,i.jsx)("div",{className:(0,s.Z)("col text--right",{"col--3":g}),children:(0,i.jsx)(O,{blogPostTitle:r,to:e.permalink})})]})}function B(e){let{children:t,className:n}=e;const l=function(){const{isBlogPostPage:e}=(0,a.nO)();return e?void 0:"margin-bottom--xl"}();return(0,i.jsxs)(r,{className:(0,s.Z)(l,n),children:[(0,i.jsx)(v,{}),(0,i.jsx)(w,{children:t}),(0,i.jsx)(U,{})]})}},2740:(e,t,n)=>{n.d(t,{Z:()=>r});n(5271);var s=n(5023),a=n(9449),i=n(2676);function r(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n4,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},8078:(e,t,n)=>{n.r(t),n.d(t,{default:()=>b});n(5271);var s=n(4814),a=n(2922),i=n(9967),r=n(3509),l=n(5535),o=n(6527),c=n(6566),d=n(3400),u=n(8625),g=n(2740),m=n(7491),h=n(3221),p=n(2676);function x(e){let{tag:t}=e;const n=(0,l.Wi)(t);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(i.d,{title:n,description:t.description}),(0,p.jsx)(u.Z,{tag:"blog_tags_posts"})]})}function j(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const r=(0,l.Wi)(t);return(0,p.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,p.jsx)(m.Z,{}),(0,p.jsxs)("header",{className:"margin-bottom--xl",children:[(0,p.jsx)(h.Z,{as:"h1",children:r}),t.description&&(0,p.jsx)("p",{children:t.description}),(0,p.jsx)(o.Z,{href:t.allTagsPath,children:(0,p.jsx)(a.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,p.jsx)(g.Z,{items:n}),(0,p.jsx)(d.Z,{metadata:i})]})}function b(e){return(0,p.jsxs)(i.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,p.jsx)(x,{...e}),(0,p.jsx)(j,{...e})]})}},7491:(e,t,n)=>{n.d(t,{Z:()=>c});n(5271);var s=n(4814),a=n(4022),i=n(3509),r=n(44),l=n(2676);function o(e){let{className:t}=e;return(0,l.jsx)(r.Z,{type:"caution",title:(0,l.jsx)(a.cI,{}),className:(0,s.Z)(t,i.k.common.unlistedBanner),children:(0,l.jsx)(a.eU,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.T$,{}),(0,l.jsx)(o,{...e})]})}},5535:(e,t,n)=>{n.d(t,{HV:()=>l,Wi:()=>r});n(5271);var s=n(2922),a=n(2351);n(2676);function i(){const{selectMessage:e}=(0,a.c)();return t=>e(t,(0,s.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}function r(e){const t=i();return(0,s.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}const l=()=>(0,s.I)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"})},4022:(e,t,n)=>{n.d(t,{T$:()=>o,cI:()=>r,eU:()=>l,ht:()=>c,xo:()=>d});n(5271);var s=n(2922),a=n(2791),i=n(2676);function r(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,i.jsx)(a.Z,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(s.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/6a40fd04.888292b4.js b/assets/js/6a40fd04.e691f641.js similarity index 84% rename from assets/js/6a40fd04.888292b4.js rename to assets/js/6a40fd04.e691f641.js index 2bf2b4083..8d453b8be 100644 --- a/assets/js/6a40fd04.888292b4.js +++ b/assets/js/6a40fd04.e691f641.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5736],{3599:a=>{a.exports=JSON.parse('{"tag":{"label":"renaming app","permalink":"/blog/tags/renaming-app","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/renaming-app","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6590],{8993:a=>{a.exports=JSON.parse('{"tag":{"label":"renaming app","permalink":"/blog/tags/renaming-app","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/renaming-app","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6bbbce94.a8e63d10.js b/assets/js/6bbbce94.3031c57c.js similarity index 84% rename from assets/js/6bbbce94.a8e63d10.js rename to assets/js/6bbbce94.3031c57c.js index 8520c4a9f..8f30490c6 100644 --- a/assets/js/6bbbce94.a8e63d10.js +++ b/assets/js/6bbbce94.3031c57c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2639],{2976:a=>{a.exports=JSON.parse('{"tag":{"label":"family-friendly","permalink":"/blog/tags/family-friendly","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/family-friendly","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9636],{3127:a=>{a.exports=JSON.parse('{"tag":{"label":"family-friendly","permalink":"/blog/tags/family-friendly","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/family-friendly","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6e64f266.2141b30d.js b/assets/js/6e64f266.2141b30d.js deleted file mode 100644 index a606d69ac..000000000 --- a/assets/js/6e64f266.2141b30d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5781],{8076:a=>{a.exports=JSON.parse('{"tag":{"label":"documentation migration","permalink":"/blog/tags/documentation-migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/documentation-migration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6e64f266.fc6f6795.js b/assets/js/6e64f266.fc6f6795.js new file mode 100644 index 000000000..09f74060b --- /dev/null +++ b/assets/js/6e64f266.fc6f6795.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[902],{6508:a=>{a.exports=JSON.parse('{"tag":{"label":"documentation migration","permalink":"/blog/tags/documentation-migration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/documentation-migration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/6ff2a8aa.2304b994.js b/assets/js/6ff2a8aa.92814a6d.js similarity index 83% rename from assets/js/6ff2a8aa.2304b994.js rename to assets/js/6ff2a8aa.92814a6d.js index e39c76e9c..dcba12acf 100644 --- a/assets/js/6ff2a8aa.2304b994.js +++ b/assets/js/6ff2a8aa.92814a6d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7773],{1399:l=>{l.exports=JSON.parse('{"tag":{"label":"poll","permalink":"/blog/tags/poll","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/poll","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1474],{1624:l=>{l.exports=JSON.parse('{"tag":{"label":"poll","permalink":"/blog/tags/poll","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/poll","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/71f025ea.2ce78be7.js b/assets/js/71f025ea.2ce78be7.js new file mode 100644 index 000000000..09ba770c1 --- /dev/null +++ b/assets/js/71f025ea.2ce78be7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2124],{6381:a=>{a.exports=JSON.parse('{"tag":{"label":"community-driven","permalink":"/blog/tags/community-driven","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community-driven","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/71f025ea.6f40bb5d.js b/assets/js/71f025ea.6f40bb5d.js deleted file mode 100644 index 310b4856d..000000000 --- a/assets/js/71f025ea.6f40bb5d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[121],{389:a=>{a.exports=JSON.parse('{"tag":{"label":"community-driven","permalink":"/blog/tags/community-driven","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community-driven","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/71f72e4c.07d644c6.js b/assets/js/71f72e4c.32e2dadb.js similarity index 84% rename from assets/js/71f72e4c.07d644c6.js rename to assets/js/71f72e4c.32e2dadb.js index 674ddb3c6..03ada203d 100644 --- a/assets/js/71f72e4c.07d644c6.js +++ b/assets/js/71f72e4c.32e2dadb.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7523],{5572:a=>{a.exports=JSON.parse('{"tag":{"label":"updates","permalink":"/blog/tags/updates","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/updates","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8106],{4681:a=>{a.exports=JSON.parse('{"tag":{"label":"updates","permalink":"/blog/tags/updates","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/updates","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/73ad9a8e.49a59d01.js b/assets/js/73ad9a8e.49a59d01.js new file mode 100644 index 000000000..4236cf1aa --- /dev/null +++ b/assets/js/73ad9a8e.49a59d01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3629],{2533:e=>{e.exports=JSON.parse('{"tag":{"label":"theme","permalink":"/blog/tags/theme","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/theme","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/73ad9a8e.7e581625.js b/assets/js/73ad9a8e.7e581625.js deleted file mode 100644 index ee18fb306..000000000 --- a/assets/js/73ad9a8e.7e581625.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9096],{136:e=>{e.exports=JSON.parse('{"tag":{"label":"theme","permalink":"/blog/tags/theme","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/theme","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7424d9c3.01ede77c.js b/assets/js/7424d9c3.01ede77c.js new file mode 100644 index 000000000..b60c8a7db --- /dev/null +++ b/assets/js/7424d9c3.01ede77c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7703],{6731:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>t,toc:()=>u});var t=n(6944),i=n(6070),l=n(8591);const o={title:"Choosing a New, Family-Friendly Name for this project!",authors:["alfagun74"],tags:["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},r=void 0,s={authorsImageUrls:[void 0]},u=[];function m(e){const a={a:"a",p:"p",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.p,{children:"Hello, everyone!"}),"\n",(0,i.jsxs)(a.p,{children:["We have an important announcement to share about our ",(0,i.jsx)(a.a,{href:"https://en.wikipedia.org/wiki/Source-available_software",children:"source-available"})," gaming platform, project. We have listened to your feedback and concerns, and now we need your help in choosing a new, family-friendly name that better reflects our platform's values. To make this decision-making process more convenient, we have created a poll with 100 potential names, suggested by you on our ",(0,i.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", some of which were generated by AI. Your participation in shaping the future of our platform is greatly appreciated."]}),"\n",(0,i.jsx)(a.p,{children:"We kindly request your support in selecting a new name for our gaming platform. The poll offers a variety of names, and we ask that you choose at least 10 names (10%) that appeal to you. By gathering diverse input and minimizing bias, we aim to create an inclusive and enjoyable experience for all users. We apologize if the current name has caused any discomfort, and we are committed to creating a welcoming environment for gamers."}),"\n",(0,i.jsxs)(a.p,{children:["To cast your votes and contribute to the selection of a new, family-friendly name for our ",(0,i.jsx)(a.a,{href:"https://en.wikipedia.org/wiki/Source-available_software",children:"source-available"})," gaming platform, please click on the link provided at the end of this post. Your voice matters, and together, we can find a name that truly represents our app's essence. The results will be announced on this blog around July 15, 2023."]}),"\n",(0,i.jsx)(a.p,{children:"We sincerely appreciate your support and encourage you to stay tuned for updates as we continue to improve our platform based on your valuable feedback."}),"\n",(0,i.jsxs)(a.p,{children:["Link to the poll: ",(0,i.jsx)(a.a,{href:"https://forms.gle/cYsURG6BqMXcxE3B8",children:"https://forms.gle/cYsURG6BqMXcxE3B8"})]}),"\n",(0,i.jsx)(a.p,{children:"Happy voting!"})]})}function c(e={}){const{wrapper:a}={...(0,l.R)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},8591:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(758);const i={},l=t.createContext(i);function o(e){const a=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(l.Provider,{value:a},e.children)}},6944:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/08/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-08.md","source":"@site/blog/2023-07-08.md","title":"Choosing a New, Family-Friendly Name for this project!","description":"Hello, everyone!","date":"2023-07-08T00:00:00.000Z","tags":[{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"gaming platform","permalink":"/blog/tags/gaming-platform"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"new name","permalink":"/blog/tags/new-name"},{"inline":true,"label":"family-friendly","permalink":"/blog/tags/family-friendly"},{"inline":true,"label":"poll","permalink":"/blog/tags/poll"},{"inline":true,"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"inclusivity","permalink":"/blog/tags/inclusivity"},{"inline":true,"label":"user participation","permalink":"/blog/tags/user-participation"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"decision-making","permalink":"/blog/tags/decision-making"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"platform values","permalink":"/blog/tags/platform-values"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"future development","permalink":"/blog/tags/future-development"}],"readingTime":1.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Choosing a New, Family-Friendly Name for this project!","authors":["alfagun74"],"tags":["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},"unlisted":false,"prevItem":{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/"},"nextItem":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","permalink":"/blog/2023/07/01/"}}')}}]); \ No newline at end of file diff --git a/assets/js/7424d9c3.3f5cb2ce.js b/assets/js/7424d9c3.3f5cb2ce.js deleted file mode 100644 index e81de8fac..000000000 --- a/assets/js/7424d9c3.3f5cb2ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9268],{2903:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>m});var t=n(2676),i=n(8358);const l={title:"Choosing a New, Family-Friendly Name for this project!",authors:["alfagun74"],tags:["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},o=void 0,r={permalink:"/blog/2023/07/08/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-08.md",source:"@site/blog/2023-07-08.md",title:"Choosing a New, Family-Friendly Name for this project!",description:"Hello, everyone!",date:"2023-07-08T00:00:00.000Z",tags:[{inline:!0,label:"source-available",permalink:"/blog/tags/source-available"},{inline:!0,label:"gaming platform",permalink:"/blog/tags/gaming-platform"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"new name",permalink:"/blog/tags/new-name"},{inline:!0,label:"family-friendly",permalink:"/blog/tags/family-friendly"},{inline:!0,label:"poll",permalink:"/blog/tags/poll"},{inline:!0,label:"AI-generated names",permalink:"/blog/tags/ai-generated-names"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"inclusivity",permalink:"/blog/tags/inclusivity"},{inline:!0,label:"user participation",permalink:"/blog/tags/user-participation"},{inline:!0,label:"announcement",permalink:"/blog/tags/announcement"},{inline:!0,label:"decision-making",permalink:"/blog/tags/decision-making"},{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"platform values",permalink:"/blog/tags/platform-values"},{inline:!0,label:"voting",permalink:"/blog/tags/voting"},{inline:!0,label:"future development",permalink:"/blog/tags/future-development"}],readingTime:1.26,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Choosing a New, Family-Friendly Name for this project!",authors:["alfagun74"],tags:["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},unlisted:!1,prevItem:{title:"Battling Harassment and Trolls in Our App Community",permalink:"/blog/2023/07/09/"},nextItem:{title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",permalink:"/blog/2023/07/01/"}},s={authorsImageUrls:[void 0]},m=[];function c(e){const a={a:"a",p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:"Hello, everyone!"}),"\n",(0,t.jsxs)(a.p,{children:["We have an important announcement to share about our ",(0,t.jsx)(a.a,{href:"https://en.wikipedia.org/wiki/Source-available_software",children:"source-available"})," gaming platform, project. We have listened to your feedback and concerns, and now we need your help in choosing a new, family-friendly name that better reflects our platform's values. To make this decision-making process more convenient, we have created a poll with 100 potential names, suggested by you on our ",(0,t.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", some of which were generated by AI. Your participation in shaping the future of our platform is greatly appreciated."]}),"\n",(0,t.jsx)(a.p,{children:"We kindly request your support in selecting a new name for our gaming platform. The poll offers a variety of names, and we ask that you choose at least 10 names (10%) that appeal to you. By gathering diverse input and minimizing bias, we aim to create an inclusive and enjoyable experience for all users. We apologize if the current name has caused any discomfort, and we are committed to creating a welcoming environment for gamers."}),"\n",(0,t.jsxs)(a.p,{children:["To cast your votes and contribute to the selection of a new, family-friendly name for our ",(0,t.jsx)(a.a,{href:"https://en.wikipedia.org/wiki/Source-available_software",children:"source-available"})," gaming platform, please click on the link provided at the end of this post. Your voice matters, and together, we can find a name that truly represents our app's essence. The results will be announced on this blog around July 15, 2023."]}),"\n",(0,t.jsx)(a.p,{children:"We sincerely appreciate your support and encourage you to stay tuned for updates as we continue to improve our platform based on your valuable feedback."}),"\n",(0,t.jsxs)(a.p,{children:["Link to the poll: ",(0,t.jsx)(a.a,{href:"https://forms.gle/cYsURG6BqMXcxE3B8",children:"https://forms.gle/cYsURG6BqMXcxE3B8"})]}),"\n",(0,t.jsx)(a.p,{children:"Happy voting!"})]})}function u(e={}){const{wrapper:a}={...(0,i.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8358:(e,a,n)=>{n.d(a,{Z:()=>r,a:()=>o});var t=n(5271);const i={},l=t.createContext(i);function o(e){const a=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7486ddfc.bb66f90e.js b/assets/js/7486ddfc.bb66f90e.js deleted file mode 100644 index 50c1a128b..000000000 --- a/assets/js/7486ddfc.bb66f90e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8437],{7734:e=>{e.exports=JSON.parse('{"tag":{"label":"November Update","permalink":"/blog/tags/november-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/november-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7486ddfc.f88d6585.js b/assets/js/7486ddfc.f88d6585.js new file mode 100644 index 000000000..2d666f8a7 --- /dev/null +++ b/assets/js/7486ddfc.f88d6585.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6053],{460:e=>{e.exports=JSON.parse('{"tag":{"label":"November Update","permalink":"/blog/tags/november-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/november-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7489ed02.06343463.js b/assets/js/7489ed02.06343463.js deleted file mode 100644 index e93ea31fb..000000000 --- a/assets/js/7489ed02.06343463.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6515],{1173:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>m});var l=t(2676),n=t(8358);const i={title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",authors:["alfagun74"],tags:["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},r=void 0,o={permalink:"/blog/2023/07/01/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-01.md",source:"@site/blog/2023-07-01.md",title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",description:"Hey Guys,",date:"2023-07-01T00:00:00.000Z",tags:[{inline:!0,label:"gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"source-available",permalink:"/blog/tags/source-available"},{inline:!0,label:"self-hosted",permalink:"/blog/tags/self-hosted"},{inline:!0,label:"alternative",permalink:"/blog/tags/alternative"},{inline:!0,label:"cloud-based game platforms",permalink:"/blog/tags/cloud-based-game-platforms"},{inline:!0,label:"DRM-free games",permalink:"/blog/tags/drm-free-games"},{inline:!0,label:"file server",permalink:"/blog/tags/file-server"},{inline:!0,label:"multi-user authentication",permalink:"/blog/tags/multi-user-authentication"},{inline:!0,label:"metadata",permalink:"/blog/tags/metadata"},{inline:!0,label:"RAWG API",permalink:"/blog/tags/rawg-api"},{inline:!0,label:"health monitoring",permalink:"/blog/tags/health-monitoring"},{inline:!0,label:"API",permalink:"/blog/tags/api"},{inline:!0,label:"Discord server",permalink:"/blog/tags/discord-server"},{inline:!0,label:"Reddit forum",permalink:"/blog/tags/reddit-forum"},{inline:!0,label:"Lemmy forum",permalink:"/blog/tags/lemmy-forum"}],readingTime:1.78,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",authors:["alfagun74"],tags:["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},unlisted:!1,prevItem:{title:"Choosing a New, Family-Friendly Name for this project!",permalink:"/blog/2023/07/08/"}},s={authorsImageUrls:[void 0]},m=[];function g(e){const a={p:"p",...(0,n.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.p,{children:"Hey Guys,"}),"\n",(0,l.jsx)(a.p,{children:"Our team has been working tirelessly for the past year on creating GameVault, the source-available, self-hosted, and free alternative to traditional cloud-based game platforms like Steam, Origin, Epic Games, and GoG. We are excited to share that GameVault is now available for everyone to use, and we are delighted to disclose it to the community."})]})}function u(e={}){const{wrapper:a}={...(0,n.a)(),...e.components};return a?(0,l.jsx)(a,{...e,children:(0,l.jsx)(g,{...e})}):g(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>o,a:()=>r});var l=t(5271);const n={},i=l.createContext(n);function r(e){const a=l.useContext(i);return l.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),l.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7489ed02.f3248100.js b/assets/js/7489ed02.f3248100.js new file mode 100644 index 000000000..637063f6c --- /dev/null +++ b/assets/js/7489ed02.f3248100.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8354],{4440:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var l=t(5518),r=t(6070),n=t(8591);const i={title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",authors:["alfagun74"],tags:["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},o=void 0,s={authorsImageUrls:[void 0]},m=[];function u(e){const a={p:"p",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.p,{children:"Hey Guys,"}),"\n",(0,r.jsx)(a.p,{children:"Our team has been working tirelessly for the past year on creating GameVault, the source-available, self-hosted, and free alternative to traditional cloud-based game platforms like Steam, Origin, Epic Games, and GoG. We are excited to share that GameVault is now available for everyone to use, and we are delighted to disclose it to the community."})]})}function g(e={}){const{wrapper:a}={...(0,n.R)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},8591:(e,a,t)=>{t.d(a,{R:()=>i,x:()=>o});var l=t(758);const r={},n=l.createContext(r);function i(e){const a=l.useContext(n);return l.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),l.createElement(n.Provider,{value:a},e.children)}},5518:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-01.md","source":"@site/blog/2023-07-01.md","title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","description":"Hey Guys,","date":"2023-07-01T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"alternative","permalink":"/blog/tags/alternative"},{"inline":true,"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms"},{"inline":true,"label":"DRM-free games","permalink":"/blog/tags/drm-free-games"},{"inline":true,"label":"file server","permalink":"/blog/tags/file-server"},{"inline":true,"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"RAWG API","permalink":"/blog/tags/rawg-api"},{"inline":true,"label":"health monitoring","permalink":"/blog/tags/health-monitoring"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"Discord server","permalink":"/blog/tags/discord-server"},{"inline":true,"label":"Reddit forum","permalink":"/blog/tags/reddit-forum"},{"inline":true,"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum"}],"readingTime":1.78,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","authors":["alfagun74"],"tags":["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},"unlisted":false,"prevItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}}')}}]); \ No newline at end of file diff --git a/assets/js/751a244a.7c13fc97.js b/assets/js/751a244a.7c13fc97.js new file mode 100644 index 000000000..4524b8668 --- /dev/null +++ b/assets/js/751a244a.7c13fc97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9514],{584:a=>{a.exports=JSON.parse('{"tag":{"label":"community management","permalink":"/blog/tags/community-management","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community-management","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/751a244a.99de35a7.js b/assets/js/751a244a.99de35a7.js deleted file mode 100644 index 1b2ee0253..000000000 --- a/assets/js/751a244a.99de35a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9041],{2108:a=>{a.exports=JSON.parse('{"tag":{"label":"community management","permalink":"/blog/tags/community-management","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community-management","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7558b7a2.df837680.js b/assets/js/7558b7a2.a9d5ae10.js similarity index 85% rename from assets/js/7558b7a2.df837680.js rename to assets/js/7558b7a2.a9d5ae10.js index 2da05e2a5..a2f22b46c 100644 --- a/assets/js/7558b7a2.df837680.js +++ b/assets/js/7558b7a2.a9d5ae10.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4327],{1416:a=>{a.exports=JSON.parse('{"tag":{"label":"transition process","permalink":"/blog/tags/transition-process","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/transition-process","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7400],{2016:a=>{a.exports=JSON.parse('{"tag":{"label":"transition process","permalink":"/blog/tags/transition-process","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/transition-process","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7576ca6a.ca031a19.js b/assets/js/7576ca6a.ca031a19.js deleted file mode 100644 index 67f7e3c19..000000000 --- a/assets/js/7576ca6a.ca031a19.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3236],{6467:a=>{a.exports=JSON.parse('{"tag":{"label":"video games","permalink":"/blog/tags/video-games","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/video-games","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5ac1a9ec.ee9e635b.js b/assets/js/7576ca6a.f5ca8cb5.js similarity index 53% rename from assets/js/5ac1a9ec.ee9e635b.js rename to assets/js/7576ca6a.f5ca8cb5.js index d954e0549..a6376ac12 100644 --- a/assets/js/5ac1a9ec.ee9e635b.js +++ b/assets/js/7576ca6a.f5ca8cb5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2518],{139:a=>{a.exports=JSON.parse('{"tag":{"label":"alternative","permalink":"/blog/tags/alternative","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/alternative","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[135],{4970:a=>{a.exports=JSON.parse('{"tag":{"label":"video games","permalink":"/blog/tags/video-games","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/video-games","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7754063d.2f94657f.js b/assets/js/7754063d.4e7b3133.js similarity index 85% rename from assets/js/7754063d.2f94657f.js rename to assets/js/7754063d.4e7b3133.js index d5b4ae957..65111be85 100644 --- a/assets/js/7754063d.2f94657f.js +++ b/assets/js/7754063d.4e7b3133.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3116],{1552:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-journey","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8341],{7565:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-journey","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/77a8abe0.6cee7d2b.js b/assets/js/77a8abe0.6cee7d2b.js deleted file mode 100644 index aa4c35a33..000000000 --- a/assets/js/77a8abe0.6cee7d2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9348],{134:t=>{t.exports=JSON.parse('{"tag":{"label":"continued support","permalink":"/blog/tags/continued-support","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/continued-support","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/77a8abe0.b52c3a5b.js b/assets/js/77a8abe0.b52c3a5b.js new file mode 100644 index 000000000..8f17d73fd --- /dev/null +++ b/assets/js/77a8abe0.b52c3a5b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4404],{3021:t=>{t.exports=JSON.parse('{"tag":{"label":"continued support","permalink":"/blog/tags/continued-support","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/continued-support","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/77f7e459.a29ad4a7.js b/assets/js/77f7e459.a37cfdfd.js similarity index 84% rename from assets/js/77f7e459.a29ad4a7.js rename to assets/js/77f7e459.a37cfdfd.js index 9f71da688..fe8b43eae 100644 --- a/assets/js/77f7e459.a29ad4a7.js +++ b/assets/js/77f7e459.a37cfdfd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5805],{9919:a=>{a.exports=JSON.parse('{"tag":{"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/git-hub-issue","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3973],{9912:a=>{a.exports=JSON.parse('{"tag":{"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/git-hub-issue","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7864c493.9645bd45.js b/assets/js/7864c493.9645bd45.js deleted file mode 100644 index a4090cac5..000000000 --- a/assets/js/7864c493.9645bd45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[111],{2941:a=>{a.exports=JSON.parse('{"tag":{"label":"blackmail","permalink":"/blog/tags/blackmail","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/blackmail","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7864c493.9ddb930d.js b/assets/js/7864c493.9ddb930d.js new file mode 100644 index 000000000..cd36b5109 --- /dev/null +++ b/assets/js/7864c493.9ddb930d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7457],{2565:a=>{a.exports=JSON.parse('{"tag":{"label":"blackmail","permalink":"/blog/tags/blackmail","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/blackmail","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7a0110f5.3ab6f421.js b/assets/js/7a0110f5.3ab6f421.js deleted file mode 100644 index 8d3777c3f..000000000 --- a/assets/js/7a0110f5.3ab6f421.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2777],{330:a=>{a.exports=JSON.parse('{"tag":{"label":"gaming platform","permalink":"/blog/tags/gaming-platform","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-platform","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7a0110f5.45ceabe8.js b/assets/js/7a0110f5.45ceabe8.js new file mode 100644 index 000000000..09674ac19 --- /dev/null +++ b/assets/js/7a0110f5.45ceabe8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7530],{9714:a=>{a.exports=JSON.parse('{"tag":{"label":"gaming platform","permalink":"/blog/tags/gaming-platform","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-platform","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7b99d5ba.a1b49a5b.js b/assets/js/7b99d5ba.a1b49a5b.js deleted file mode 100644 index ebca1a8e6..000000000 --- a/assets/js/7b99d5ba.a1b49a5b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1383],{5538:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var t=n(2676),l=n(8358);const i={title:"Battling Harassment and Trolls in Our App Community",authors:["alfagun74"],tags:["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},s=void 0,r={permalink:"/blog/2023/07/09/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-09.md",source:"@site/blog/2023-07-09.md",title:"Battling Harassment and Trolls in Our App Community",description:"Hey folks,",date:"2023-07-09T00:00:00.000Z",tags:[{inline:!0,label:"harassment",permalink:"/blog/tags/harassment"},{inline:!0,label:"blackmail",permalink:"/blog/tags/blackmail"},{inline:!0,label:"threats",permalink:"/blog/tags/threats"},{inline:!0,label:"spam",permalink:"/blog/tags/spam"},{inline:!0,label:"trolls",permalink:"/blog/tags/trolls"},{inline:!0,label:"negative narratives",permalink:"/blog/tags/negative-narratives"},{inline:!0,label:"safe environment",permalink:"/blog/tags/safe-environment"},{inline:!0,label:"racist",permalink:"/blog/tags/racist"},{inline:!0,label:"developers",permalink:"/blog/tags/developers"},{inline:!0,label:"public",permalink:"/blog/tags/public"},{inline:!0,label:"creepy behavior",permalink:"/blog/tags/creepy-behavior"},{inline:!0,label:"app",permalink:"/blog/tags/app"},{inline:!0,label:"support",permalink:"/blog/tags/support"},{inline:!0,label:"financial assistance",permalink:"/blog/tags/financial-assistance"},{inline:!0,label:"motivation",permalink:"/blog/tags/motivation"},{inline:!0,label:"GameVault app",permalink:"/blog/tags/game-vault-app"},{inline:!0,label:"bugs",permalink:"/blog/tags/bugs"},{inline:!0,label:"feature requests",permalink:"/blog/tags/feature-requests"},{inline:!0,label:"improvement",permalink:"/blog/tags/improvement"},{inline:!0,label:"success",permalink:"/blog/tags/success"},{inline:!0,label:"engagement",permalink:"/blog/tags/engagement"}],readingTime:1.955,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Battling Harassment and Trolls in Our App Community",authors:["alfagun74"],tags:["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},unlisted:!1,prevItem:{title:"A Closer Look at GameVaults 'Source-Available' Nature",permalink:"/blog/2023/07/13/"},nextItem:{title:"Choosing a New, Family-Friendly Name for this project!",permalink:"/blog/2023/07/08/"}},o={authorsImageUrls:[void 0]},p=[];function m(e){const a={p:"p",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:"Hey folks,"}),"\n",(0,t.jsx)(a.p,{children:"We have an important update to share with you all while our poll is in progress. It has come to our attention that a group of individuals has been engaging in harassing, blackmailing, and threatening behavior towards us."})]})}function g(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(m,{...e})}):m(e)}},8358:(e,a,n)=>{n.d(a,{Z:()=>r,a:()=>s});var t=n(5271);const l={},i=t.createContext(l);function s(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),t.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b99d5ba.ca363ec4.js b/assets/js/7b99d5ba.ca363ec4.js new file mode 100644 index 000000000..7ac6d1517 --- /dev/null +++ b/assets/js/7b99d5ba.ca363ec4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5572],{2592:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>n,toc:()=>p});var n=t(1663),l=t(6070),i=t(8591);const r={title:"Battling Harassment and Trolls in Our App Community",authors:["alfagun74"],tags:["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},s=void 0,o={authorsImageUrls:[void 0]},p=[];function u(e){const a={p:"p",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.p,{children:"Hey folks,"}),"\n",(0,l.jsx)(a.p,{children:"We have an important update to share with you all while our poll is in progress. It has come to our attention that a group of individuals has been engaging in harassing, blackmailing, and threatening behavior towards us."})]})}function m(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,l.jsx)(a,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},8591:(e,a,t)=>{t.d(a,{R:()=>r,x:()=>s});var n=t(758);const l={},i=n.createContext(l);function r(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function s(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(i.Provider,{value:a},e.children)}},1663:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-09.md","source":"@site/blog/2023-07-09.md","title":"Battling Harassment and Trolls in Our App Community","description":"Hey folks,","date":"2023-07-09T00:00:00.000Z","tags":[{"inline":true,"label":"harassment","permalink":"/blog/tags/harassment"},{"inline":true,"label":"blackmail","permalink":"/blog/tags/blackmail"},{"inline":true,"label":"threats","permalink":"/blog/tags/threats"},{"inline":true,"label":"spam","permalink":"/blog/tags/spam"},{"inline":true,"label":"trolls","permalink":"/blog/tags/trolls"},{"inline":true,"label":"negative narratives","permalink":"/blog/tags/negative-narratives"},{"inline":true,"label":"safe environment","permalink":"/blog/tags/safe-environment"},{"inline":true,"label":"racist","permalink":"/blog/tags/racist"},{"inline":true,"label":"developers","permalink":"/blog/tags/developers"},{"inline":true,"label":"public","permalink":"/blog/tags/public"},{"inline":true,"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior"},{"inline":true,"label":"app","permalink":"/blog/tags/app"},{"inline":true,"label":"support","permalink":"/blog/tags/support"},{"inline":true,"label":"financial assistance","permalink":"/blog/tags/financial-assistance"},{"inline":true,"label":"motivation","permalink":"/blog/tags/motivation"},{"inline":true,"label":"GameVault app","permalink":"/blog/tags/game-vault-app"},{"inline":true,"label":"bugs","permalink":"/blog/tags/bugs"},{"inline":true,"label":"feature requests","permalink":"/blog/tags/feature-requests"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"success","permalink":"/blog/tags/success"},{"inline":true,"label":"engagement","permalink":"/blog/tags/engagement"}],"readingTime":1.955,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Battling Harassment and Trolls in Our App Community","authors":["alfagun74"],"tags":["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},"unlisted":false,"prevItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"},"nextItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}}')}}]); \ No newline at end of file diff --git a/assets/js/7c4a7780.96b1e592.js b/assets/js/7c4a7780.44b4fffc.js similarity index 85% rename from assets/js/7c4a7780.96b1e592.js rename to assets/js/7c4a7780.44b4fffc.js index 4f2783f39..ab32469de 100644 --- a/assets/js/7c4a7780.96b1e592.js +++ b/assets/js/7c4a7780.44b4fffc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5074],{6765:e=>{e.exports=JSON.parse('{"tag":{"label":"gaming experience","permalink":"/blog/tags/gaming-experience","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-experience","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6410],{4965:e=>{e.exports=JSON.parse('{"tag":{"label":"gaming experience","permalink":"/blog/tags/gaming-experience","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-experience","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/7ef69c2b.14d18f74.js b/assets/js/7ef69c2b.14d18f74.js deleted file mode 100644 index 77a590e24..000000000 --- a/assets/js/7ef69c2b.14d18f74.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7020],{7534:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>m});var n=a(2676),l=a(8358);const o={title:"An update so major, we could have built the product from scratch.",authors:["alfagun74"],tags:["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},r=void 0,i={permalink:"/blog/2024/10/20/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-10-20.md",source:"@site/blog/2024-10-20.md",title:"An update so major, we could have built the product from scratch.",description:"Hello, GameVault Community!",date:"2024-10-20T00:00:00.000Z",tags:[{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"Client Update",permalink:"/blog/tags/client-update"},{inline:!0,label:"Server Update",permalink:"/blog/tags/server-update"},{inline:!0,label:"metadata framework",permalink:"/blog/tags/metadata-framework"},{inline:!0,label:"plugin system",permalink:"/blog/tags/plugin-system"},{inline:!0,label:"parental control",permalink:"/blog/tags/parental-control"},{inline:!0,label:"age restrictions",permalink:"/blog/tags/age-restrictions"},{inline:!0,label:"theme",permalink:"/blog/tags/theme"},{inline:!0,label:"app optimization",permalink:"/blog/tags/app-optimization"},{inline:!0,label:"analytics",permalink:"/blog/tags/analytics"},{inline:!0,label:"notes",permalink:"/blog/tags/notes"},{inline:!0,label:"community management",permalink:"/blog/tags/community-management"}],readingTime:2.515,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"An update so major, we could have built the product from scratch.",authors:["alfagun74"],tags:["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},unlisted:!1,nextItem:{title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",permalink:"/blog/2024/05/07/"}},s={authorsImageUrls:[void 0]},m=[];function u(e){const t={p:"p",strong:"strong",...(0,l.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:(0,n.jsx)(t.strong,{children:"Hello, GameVault Community!"})}),"\n",(0,n.jsxs)(t.p,{children:["After six months of hard work, we\u2019re beyond excited to unveil our biggest update yet: ",(0,n.jsx)(t.strong,{children:"GameVault Client v1.12"})," and ",(0,n.jsx)(t.strong,{children:"GameVault Server v13"}),"! This release is so massive, it feels like we could\u2019ve built the product from scratch\u2014there\u2019s that much new ground covered."]})]})}function c(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},8358:(e,t,a)=>{a.d(t,{Z:()=>i,a:()=>r});var n=a(5271);const l={},o=n.createContext(l);function r(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ef69c2b.a4f60197.js b/assets/js/7ef69c2b.a4f60197.js new file mode 100644 index 000000000..0a4773c6d --- /dev/null +++ b/assets/js/7ef69c2b.a4f60197.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6755],{9988:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>n,toc:()=>m});var n=a(7666),l=a(6070),r=a(8591);const o={title:"An update so major, we could have built the product from scratch.",authors:["alfagun74"],tags:["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},i=void 0,s={authorsImageUrls:[void 0]},m=[];function u(e){const t={p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.p,{children:(0,l.jsx)(t.strong,{children:"Hello, GameVault Community!"})}),"\n",(0,l.jsxs)(t.p,{children:["After six months of hard work, we\u2019re beyond excited to unveil our biggest update yet: ",(0,l.jsx)(t.strong,{children:"GameVault Client v1.12"})," and ",(0,l.jsx)(t.strong,{children:"GameVault Server v13"}),"! This release is so massive, it feels like we could\u2019ve built the product from scratch\u2014there\u2019s that much new ground covered."]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>i});var n=a(758);const l={},r=n.createContext(l);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),n.createElement(r.Provider,{value:t},e.children)}},7666:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/10/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-10-20.md","source":"@site/blog/2024-10-20.md","title":"An update so major, we could have built the product from scratch.","description":"Hello, GameVault Community!","date":"2024-10-20T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Client Update","permalink":"/blog/tags/client-update"},{"inline":true,"label":"Server Update","permalink":"/blog/tags/server-update"},{"inline":true,"label":"metadata framework","permalink":"/blog/tags/metadata-framework"},{"inline":true,"label":"plugin system","permalink":"/blog/tags/plugin-system"},{"inline":true,"label":"parental control","permalink":"/blog/tags/parental-control"},{"inline":true,"label":"age restrictions","permalink":"/blog/tags/age-restrictions"},{"inline":true,"label":"theme","permalink":"/blog/tags/theme"},{"inline":true,"label":"app optimization","permalink":"/blog/tags/app-optimization"},{"inline":true,"label":"analytics","permalink":"/blog/tags/analytics"},{"inline":true,"label":"notes","permalink":"/blog/tags/notes"},{"inline":true,"label":"community management","permalink":"/blog/tags/community-management"}],"readingTime":2.515,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"An update so major, we could have built the product from scratch.","authors":["alfagun74"],"tags":["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},"unlisted":false,"nextItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"}}')}}]); \ No newline at end of file diff --git a/assets/js/80292675.2227e39e.js b/assets/js/80292675.2227e39e.js deleted file mode 100644 index 33e8604c7..000000000 --- a/assets/js/80292675.2227e39e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6487],{6905:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var i=n(2676),s=n(8358);const a={title:"Using UNRAID",sidebar_position:5},r=void 0,o={id:"server-docs/setup/unraid",title:"Using UNRAID",description:"Unraid is a storage operating system that allows users to create a centralized and scalable network-attached storage (NAS) solution, utilizing a unique array of drives with different sizes and types while offering the flexibility to run virtual machines and Docker containers.",source:"@site/docs/server-docs/setup/unraid.md",sourceDirName:"server-docs/setup",slug:"/server-docs/setup/unraid",permalink:"/docs/server-docs/setup/unraid",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/unraid.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:5,frontMatter:{title:"Using UNRAID",sidebar_position:5},sidebar:"docs",previous:{title:"Using TrueNAS Scale",permalink:"/docs/server-docs/setup/truenas-scale"},next:{title:"Using Synology Container Manager",permalink:"/docs/server-docs/setup/synology-container-manager"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Setting up the Database",id:"step-1-setting-up-the-database",level:2},{value:"Step 2: Install POSTGRES",id:"step-2-install-postgres",level:2},{value:"Step 3: Setting up your GameVault Backend server",id:"step-3-setting-up-your-gamevault-backend-server",level:2},{value:"Alternative Step 3: Running without a PostgreSQL Database",id:"alternative-step-3-running-without-a-postgresql-database",level:3},{value:"Step 4: Configure install",id:"step-4-configure-install",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Reading the Logs",id:"reading-the-logs",level:3}];function c(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Unraid is a storage operating system that allows users to create a centralized and scalable network-attached storage (NAS) solution, utilizing a unique array of drives with different sizes and types while offering the flexibility to run virtual machines and Docker containers."}),"\n",(0,i.jsx)(t.p,{children:"You can easily set up a GameVault Server by using one of our templates from the Unraid Community Applications Store."}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"UNRAID Server Running"}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://forums.unraid.net/topic/38582-plug-in-community-applications",children:"Community Applications Plugin installed"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"step-1-setting-up-the-database",children:"Step 1: Setting up the Database"}),"\n",(0,i.jsxs)(t.p,{children:["Log into your Unraid dashboard and navigate to your apps section of the dashboard and search for the offical ",(0,i.jsx)(t.code,{children:"postgresql15"})," Community Application by ",(0,i.jsx)(t.code,{children:"postgres"})]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 1",src:n(4580).Z+"",width:"1216",height:"721"})}),"\n",(0,i.jsx)(t.h2,{id:"step-2-install-postgres",children:"Step 2: Install POSTGRES"}),"\n",(0,i.jsx)(t.p,{children:"Using the default configuration making sure you add the following entries:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"POSTGRES_USER: gamevault\nPOSTGRES_PASSWORD: RANDOMPASSWORD\nPOSTGRES_DB: gamevault\n"})}),"\n",(0,i.jsx)(t.p,{children:"Make sure you remember the password and port you set we will use this in step 3"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 2",src:n(5014).Z+"",width:"1531",height:"796"})}),"\n",(0,i.jsx)(t.h2,{id:"step-3-setting-up-your-gamevault-backend-server",children:"Step 3: Setting up your GameVault Backend server"}),"\n",(0,i.jsxs)(t.p,{children:["Search for ",(0,i.jsx)(t.code,{children:"gamevault-backend"})," on the Unraid app store making sure to click the one without the SQLITE in the title."]}),"\n",(0,i.jsx)(t.p,{children:"Click install"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 3",src:n(1183).Z+"",width:"1417",height:"758"})}),"\n",(0,i.jsx)(t.h3,{id:"alternative-step-3-running-without-a-postgresql-database",children:"Alternative Step 3: Running without a PostgreSQL Database"}),"\n",(0,i.jsxs)(t.p,{children:["We don't recommend it but you can run GameVault without a PostgreSQL Database too by instead using the ",(0,i.jsx)(t.code,{children:"GameVault-Backend-SQLITE"})," template by ",(0,i.jsx)(t.code,{children:"phalcode"})," in Step 2."]}),"\n",(0,i.jsx)(t.h2,{id:"step-4-configure-install",children:"Step 4: Configure install"}),"\n",(0,i.jsx)(t.p,{children:"Using the password and port fill out the information that is required and click apply at the bottom."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 4",src:n(2312).Z+"",width:"1920",height:"2011"})}),"\n",(0,i.jsxs)(t.p,{children:["Your GameVault should now be available at ",(0,i.jsx)(t.code,{children:"http://tower.local:8080/"})," or ",(0,i.jsx)(t.code,{children:"HOSTNAME:PORT"})," if you changed your hostname or port."]}),"\n",(0,i.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,i.jsx)(t.p,{children:"You have now successfully set up your GameVault Server using UNRAID."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,i.jsx)(t.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,i.jsx)(t.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,i.jsx)(t.p,{children:'Navigate to "Docker" tab and left click the GameVault app icon you have created.'}),"\n",(0,i.jsx)(t.p,{children:'Click on "Stop".'}),"\n",(0,i.jsx)(t.h3,{id:"reading-the-logs",children:"Reading the Logs"}),"\n",(0,i.jsx)(t.p,{children:'Navigate to "Docker" tab and left click the GameVault app icon you have created.'}),"\n",(0,i.jsx)(t.p,{children:'Click on "Logs".'}),"\n",(0,i.jsx)(t.p,{children:"This should bring a pop-up window of the currently logs of the server."})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},4580:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/unraid1-ecd3a145196f65e0e6cca91aa7d48c7a.png"},5014:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/unraid2-fc2ab34ce802e69e4299c978335688d4.png"},1183:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/unraid3-1d0d4deaa54688b0dccb2bbdf15ea71f.png"},2312:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/unraid4-320f323ddb9e5652a93b19f4d9058c52.png"},8358:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>r});var i=n(5271);const s={},a=i.createContext(s);function r(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80292675.8e7294e1.js b/assets/js/80292675.8e7294e1.js new file mode 100644 index 000000000..93eb2cd45 --- /dev/null +++ b/assets/js/80292675.8e7294e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3716],{8656:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"server-docs/setup/unraid","title":"Using UNRAID","description":"Unraid is a storage operating system that allows users to create a centralized and scalable network-attached storage (NAS) solution, utilizing a unique array of drives with different sizes and types while offering the flexibility to run virtual machines and Docker containers.","source":"@site/docs/server-docs/setup/unraid.md","sourceDirName":"server-docs/setup","slug":"/server-docs/setup/unraid","permalink":"/docs/server-docs/setup/unraid","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/unraid.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":5,"frontMatter":{"title":"Using UNRAID","sidebar_position":5},"sidebar":"docs","previous":{"title":"Using TrueNAS Scale","permalink":"/docs/server-docs/setup/truenas-scale"},"next":{"title":"Using Synology Container Manager","permalink":"/docs/server-docs/setup/synology-container-manager"}}');var i=n(6070),a=n(8591);const r={title:"Using UNRAID",sidebar_position:5},o=void 0,l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Setting up the Database",id:"step-1-setting-up-the-database",level:2},{value:"Step 2: Install POSTGRES",id:"step-2-install-postgres",level:2},{value:"Step 3: Setting up your GameVault Backend server",id:"step-3-setting-up-your-gamevault-backend-server",level:2},{value:"Alternative Step 3: Running without a PostgreSQL Database",id:"alternative-step-3-running-without-a-postgresql-database",level:3},{value:"Step 4: Configure install",id:"step-4-configure-install",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Reading the Logs",id:"reading-the-logs",level:3}];function c(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Unraid is a storage operating system that allows users to create a centralized and scalable network-attached storage (NAS) solution, utilizing a unique array of drives with different sizes and types while offering the flexibility to run virtual machines and Docker containers."}),"\n",(0,i.jsx)(t.p,{children:"You can easily set up a GameVault Server by using one of our templates from the Unraid Community Applications Store."}),"\n",(0,i.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"UNRAID Server Running"}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://forums.unraid.net/topic/38582-plug-in-community-applications",children:"Community Applications Plugin installed"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"step-1-setting-up-the-database",children:"Step 1: Setting up the Database"}),"\n",(0,i.jsxs)(t.p,{children:["Log into your Unraid dashboard and navigate to your apps section of the dashboard and search for the offical ",(0,i.jsx)(t.code,{children:"postgresql15"})," Community Application by ",(0,i.jsx)(t.code,{children:"postgres"})]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 1",src:n(6302).A+"",width:"1216",height:"721"})}),"\n",(0,i.jsx)(t.h2,{id:"step-2-install-postgres",children:"Step 2: Install POSTGRES"}),"\n",(0,i.jsx)(t.p,{children:"Using the default configuration making sure you add the following entries:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"POSTGRES_USER: gamevault\nPOSTGRES_PASSWORD: RANDOMPASSWORD\nPOSTGRES_DB: gamevault\n"})}),"\n",(0,i.jsx)(t.p,{children:"Make sure you remember the password and port you set we will use this in step 3"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 2",src:n(8405).A+"",width:"1531",height:"796"})}),"\n",(0,i.jsx)(t.h2,{id:"step-3-setting-up-your-gamevault-backend-server",children:"Step 3: Setting up your GameVault Backend server"}),"\n",(0,i.jsxs)(t.p,{children:["Search for ",(0,i.jsx)(t.code,{children:"gamevault-backend"})," on the Unraid app store making sure to click the one without the SQLITE in the title."]}),"\n",(0,i.jsx)(t.p,{children:"Click install"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 3",src:n(3135).A+"",width:"1417",height:"758"})}),"\n",(0,i.jsx)(t.h3,{id:"alternative-step-3-running-without-a-postgresql-database",children:"Alternative Step 3: Running without a PostgreSQL Database"}),"\n",(0,i.jsxs)(t.p,{children:["We don't recommend it but you can run GameVault without a PostgreSQL Database too by instead using the ",(0,i.jsx)(t.code,{children:"GameVault-Backend-SQLITE"})," template by ",(0,i.jsx)(t.code,{children:"phalcode"})," in Step 2."]}),"\n",(0,i.jsx)(t.h2,{id:"step-4-configure-install",children:"Step 4: Configure install"}),"\n",(0,i.jsx)(t.p,{children:"Using the password and port fill out the information that is required and click apply at the bottom."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Step 4",src:n(5683).A+"",width:"1920",height:"2011"})}),"\n",(0,i.jsxs)(t.p,{children:["Your GameVault should now be available at ",(0,i.jsx)(t.code,{children:"http://tower.local:8080/"})," or ",(0,i.jsx)(t.code,{children:"HOSTNAME:PORT"})," if you changed your hostname or port."]}),"\n",(0,i.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,i.jsx)(t.p,{children:"You have now successfully set up your GameVault Server using UNRAID."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,i.jsx)(t.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,i.jsx)(t.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,i.jsx)(t.p,{children:'Navigate to "Docker" tab and left click the GameVault app icon you have created.'}),"\n",(0,i.jsx)(t.p,{children:'Click on "Stop".'}),"\n",(0,i.jsx)(t.h3,{id:"reading-the-logs",children:"Reading the Logs"}),"\n",(0,i.jsx)(t.p,{children:'Navigate to "Docker" tab and left click the GameVault app icon you have created.'}),"\n",(0,i.jsx)(t.p,{children:'Click on "Logs".'}),"\n",(0,i.jsx)(t.p,{children:"This should bring a pop-up window of the currently logs of the server."})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},6302:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/unraid1-ecd3a145196f65e0e6cca91aa7d48c7a.png"},8405:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/unraid2-fc2ab34ce802e69e4299c978335688d4.png"},3135:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/unraid3-1d0d4deaa54688b0dccb2bbdf15ea71f.png"},5683:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/unraid4-320f323ddb9e5652a93b19f4d9058c52.png"},8591:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>o});var s=n(758);const i={},a=s.createContext(i);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80404bfe.243fe57b.js b/assets/js/80404bfe.243fe57b.js deleted file mode 100644 index 5e624ca45..000000000 --- a/assets/js/80404bfe.243fe57b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[962],{4600:e=>{e.exports=JSON.parse('{"tag":{"label":"feature requests","permalink":"/blog/tags/feature-requests","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/feature-requests","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/80404bfe.f9fc8cc9.js b/assets/js/80404bfe.f9fc8cc9.js new file mode 100644 index 000000000..4c80eaba2 --- /dev/null +++ b/assets/js/80404bfe.f9fc8cc9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3134],{9894:e=>{e.exports=JSON.parse('{"tag":{"label":"feature requests","permalink":"/blog/tags/feature-requests","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/feature-requests","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/805ec11d.af062f68.js b/assets/js/805ec11d.f0716136.js similarity index 84% rename from assets/js/805ec11d.af062f68.js rename to assets/js/805ec11d.f0716136.js index 696f6e045..6525e6b45 100644 --- a/assets/js/805ec11d.af062f68.js +++ b/assets/js/805ec11d.f0716136.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5164],{3342:e=>{e.exports=JSON.parse('{"tag":{"label":"Server Update","permalink":"/blog/tags/server-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/server-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4974],{6913:e=>{e.exports=JSON.parse('{"tag":{"label":"Server Update","permalink":"/blog/tags/server-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/server-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.c8be6700.js b/assets/js/814f3328.858950a4.js similarity index 97% rename from assets/js/814f3328.c8be6700.js rename to assets/js/814f3328.858950a4.js index 94c19f09d..91eefe2c3 100644 --- a/assets/js/814f3328.c8be6700.js +++ b/assets/js/814f3328.858950a4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"An update so major, we could have built the product from scratch.","permalink":"/blog/2024/10/20/","unlisted":false,"date":"2024-10-20T00:00:00.000Z"},{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/","unlisted":false,"date":"2024-05-07T00:00:00.000Z"},{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/","unlisted":false,"date":"2024-04-14T00:00:00.000Z"},{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/","unlisted":false,"date":"2024-04-01T00:00:00.000Z"},{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/","unlisted":false,"date":"2024-03-28T00:00:00.000Z"},{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/","unlisted":false,"date":"2023-12-09T00:00:00.000Z"},{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/","unlisted":false,"date":"2023-11-20T00:00:00.000Z"},{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/","unlisted":false,"date":"2023-07-29T00:00:00.000Z"},{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/","unlisted":false,"date":"2023-07-24T00:00:00.000Z"},{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/","unlisted":false,"date":"2023-07-20T00:00:00.000Z"},{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/","unlisted":false,"date":"2023-07-19T00:00:00.000Z"},{"title":"A New Name","permalink":"/blog/2023/07/15/","unlisted":false,"date":"2023-07-15T00:00:00.000Z"},{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/","unlisted":false,"date":"2023-07-13T00:00:00.000Z"},{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/","unlisted":false,"date":"2023-07-09T00:00:00.000Z"},{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/","unlisted":false,"date":"2023-07-08T00:00:00.000Z"},{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","permalink":"/blog/2023/07/01/","unlisted":false,"date":"2023-07-01T00:00:00.000Z"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7472],{5513:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"An update so major, we could have built the product from scratch.","permalink":"/blog/2024/10/20/","unlisted":false,"date":"2024-10-20T00:00:00.000Z"},{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/","unlisted":false,"date":"2024-05-07T00:00:00.000Z"},{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/","unlisted":false,"date":"2024-04-14T00:00:00.000Z"},{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/","unlisted":false,"date":"2024-04-01T00:00:00.000Z"},{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/","unlisted":false,"date":"2024-03-28T00:00:00.000Z"},{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/","unlisted":false,"date":"2023-12-09T00:00:00.000Z"},{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/","unlisted":false,"date":"2023-11-20T00:00:00.000Z"},{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/","unlisted":false,"date":"2023-07-29T00:00:00.000Z"},{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/","unlisted":false,"date":"2023-07-24T00:00:00.000Z"},{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/","unlisted":false,"date":"2023-07-20T00:00:00.000Z"},{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/","unlisted":false,"date":"2023-07-19T00:00:00.000Z"},{"title":"A New Name","permalink":"/blog/2023/07/15/","unlisted":false,"date":"2023-07-15T00:00:00.000Z"},{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/","unlisted":false,"date":"2023-07-13T00:00:00.000Z"},{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/","unlisted":false,"date":"2023-07-09T00:00:00.000Z"},{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/","unlisted":false,"date":"2023-07-08T00:00:00.000Z"},{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","permalink":"/blog/2023/07/01/","unlisted":false,"date":"2023-07-01T00:00:00.000Z"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8167ef7e.c203e135.js b/assets/js/8167ef7e.c203e135.js new file mode 100644 index 000000000..0525e31c2 --- /dev/null +++ b/assets/js/8167ef7e.c203e135.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6142],{7988:e=>{e.exports=JSON.parse('{"tag":{"label":"developers","permalink":"/blog/tags/developers","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/developers","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8167ef7e.e23acf96.js b/assets/js/8167ef7e.e23acf96.js deleted file mode 100644 index 367fda651..000000000 --- a/assets/js/8167ef7e.e23acf96.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[241],{7497:e=>{e.exports=JSON.parse('{"tag":{"label":"developers","permalink":"/blog/tags/developers","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/developers","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/82c81335.7144e663.js b/assets/js/82c81335.40492f4a.js similarity index 84% rename from assets/js/82c81335.7144e663.js rename to assets/js/82c81335.40492f4a.js index 7695e9d3d..d012b4c7f 100644 --- a/assets/js/82c81335.7144e663.js +++ b/assets/js/82c81335.40492f4a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4251],{8576:t=>{t.exports=JSON.parse('{"tag":{"label":"testing","permalink":"/blog/tags/testing","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/testing","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1584],{8417:t=>{t.exports=JSON.parse('{"tag":{"label":"testing","permalink":"/blog/tags/testing","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/testing","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8577c450.c522d676.js b/assets/js/8577c450.e96dcaf1.js similarity index 83% rename from assets/js/8577c450.c522d676.js rename to assets/js/8577c450.e96dcaf1.js index a8a1647b8..a155c1b2f 100644 --- a/assets/js/8577c450.c522d676.js +++ b/assets/js/8577c450.e96dcaf1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2561],{8283:a=>{a.exports=JSON.parse('{"tag":{"label":"spam","permalink":"/blog/tags/spam","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/spam","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3354],{1944:a=>{a.exports=JSON.parse('{"tag":{"label":"spam","permalink":"/blog/tags/spam","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/spam","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8795eea9.c226c217.js b/assets/js/8795eea9.c226c217.js deleted file mode 100644 index 036bf67b0..000000000 --- a/assets/js/8795eea9.c226c217.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1053],{8671:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>g,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=o(2676),i=o(8358);const r={title:"The Migrations are finally completed",authors:["alfagun74"],tags:["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},a=void 0,l={permalink:"/blog/2023/07/20/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-20.md",source:"@site/blog/2023-07-20.md",title:"The Migrations are finally completed",description:"Hey folks,",date:"2023-07-20T00:00:00.000Z",tags:[{inline:!0,label:"app name migration",permalink:"/blog/tags/app-name-migration"},{inline:!0,label:"Microsoft Store publication",permalink:"/blog/tags/microsoft-store-publication"},{inline:!0,label:"surge of new users",permalink:"/blog/tags/surge-of-new-users"},{inline:!0,label:"Discord server promotion",permalink:"/blog/tags/discord-server-promotion"},{inline:!0,label:"spreading the word",permalink:"/blog/tags/spreading-the-word"},{inline:!0,label:"logo deciphering",permalink:"/blog/tags/logo-deciphering"},{inline:!0,label:"box representation",permalink:"/blog/tags/box-representation"},{inline:!0,label:"keyhole representation",permalink:"/blog/tags/keyhole-representation"},{inline:!0,label:"logo concept discussion",permalink:"/blog/tags/logo-concept-discussion"},{inline:!0,label:"Discord channel",permalink:"/blog/tags/discord-channel"}],readingTime:.615,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"The Migrations are finally completed",authors:["alfagun74"],tags:["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},unlisted:!1,prevItem:{title:"Celebrating 600+ Installations and announcing the upcoming big feature",permalink:"/blog/2023/07/24/"},nextItem:{title:"Quick Migration Update and new Logo",permalink:"/blog/2023/07/19/"}},s={authorsImageUrls:[void 0]},c=[];function p(e){const n={p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Hey folks,"}),"\n",(0,t.jsx)(n.p,{children:"Great news. We've successfully migrated our App name in its entirety and will resume advertising as soon as it's published on the Microsoft Store."})]})}function g(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},8358:(e,n,o)=>{o.d(n,{Z:()=>l,a:()=>a});var t=o(5271);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8795eea9.c6609c81.js b/assets/js/8795eea9.c6609c81.js new file mode 100644 index 000000000..8d85c04f8 --- /dev/null +++ b/assets/js/8795eea9.c6609c81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3154],{791:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var o=t(4580),r=t(6070),i=t(8591);const a={title:"The Migrations are finally completed",authors:["alfagun74"],tags:["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},l=void 0,s={authorsImageUrls:[void 0]},c=[];function p(e){const n={p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Hey folks,"}),"\n",(0,r.jsx)(n.p,{children:"Great news. We've successfully migrated our App name in its entirety and will resume advertising as soon as it's published on the Microsoft Store."})]})}function g(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},8591:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>l});var o=t(758);const r={},i=o.createContext(r);function a(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:n},e.children)}},4580:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-20.md","source":"@site/blog/2023-07-20.md","title":"The Migrations are finally completed","description":"Hey folks,","date":"2023-07-20T00:00:00.000Z","tags":[{"inline":true,"label":"app name migration","permalink":"/blog/tags/app-name-migration"},{"inline":true,"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication"},{"inline":true,"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users"},{"inline":true,"label":"Discord server promotion","permalink":"/blog/tags/discord-server-promotion"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering"},{"inline":true,"label":"box representation","permalink":"/blog/tags/box-representation"},{"inline":true,"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation"},{"inline":true,"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"The Migrations are finally completed","authors":["alfagun74"],"tags":["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},"unlisted":false,"prevItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"},"nextItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"}}')}}]); \ No newline at end of file diff --git a/assets/js/87cefd36.a188e09d.js b/assets/js/87cefd36.101b8e9b.js similarity index 85% rename from assets/js/87cefd36.a188e09d.js rename to assets/js/87cefd36.101b8e9b.js index 8bdb76ec0..5dba2331c 100644 --- a/assets/js/87cefd36.a188e09d.js +++ b/assets/js/87cefd36.101b8e9b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5240],{6623:a=>{a.exports=JSON.parse('{"tag":{"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/cloud-based-game-platforms","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7601],{7498:a=>{a.exports=JSON.parse('{"tag":{"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/cloud-based-game-platforms","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8852925a.709ac834.js b/assets/js/8852925a.5e6069f4.js similarity index 85% rename from assets/js/8852925a.709ac834.js rename to assets/js/8852925a.5e6069f4.js index 8e11bd5de..0037ff149 100644 --- a/assets/js/8852925a.709ac834.js +++ b/assets/js/8852925a.5e6069f4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7964],{2805:e=>{e.exports=JSON.parse('{"tag":{"label":"new name announcement","permalink":"/blog/tags/new-name-announcement","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/new-name-announcement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8793],{5033:e=>{e.exports=JSON.parse('{"tag":{"label":"new name announcement","permalink":"/blog/tags/new-name-announcement","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/new-name-announcement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/886fdd87.566679ce.js b/assets/js/886fdd87.fb2bf073.js similarity index 83% rename from assets/js/886fdd87.566679ce.js rename to assets/js/886fdd87.fb2bf073.js index 4130017fa..d2626a933 100644 --- a/assets/js/886fdd87.566679ce.js +++ b/assets/js/886fdd87.fb2bf073.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6927],{2070:a=>{a.exports=JSON.parse('{"tag":{"label":"GitHub","permalink":"/blog/tags/git-hub","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/git-hub","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8896],{1976:a=>{a.exports=JSON.parse('{"tag":{"label":"GitHub","permalink":"/blog/tags/git-hub","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/git-hub","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/89db6d1d.21ff8d69.js b/assets/js/89db6d1d.21ff8d69.js new file mode 100644 index 000000000..4a2953be3 --- /dev/null +++ b/assets/js/89db6d1d.21ff8d69.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[925],{539:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>n,toc:()=>m});var n=t(7985),l=t(6070),o=t(8591);const s={title:"A New Name",authors:["alfagun74"],tags:["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},r=void 0,i={authorsImageUrls:[void 0]},m=[];function u(e){const a={p:"p",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.p,{children:"Hey everyone,"}),"\n",(0,l.jsx)(a.p,{children:"We are thrilled to announce that the poll for choosing a new name for our app is finally over. The process of transitioning to the new name will commence very soon, and we can't wait to share the exciting updates with you."})]})}function c(e={}){const{wrapper:a}={...(0,o.R)(),...e.components};return a?(0,l.jsx)(a,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},8591:(e,a,t)=>{t.d(a,{R:()=>s,x:()=>r});var n=t(758);const l={},o=n.createContext(l);function s(e){const a=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),n.createElement(o.Provider,{value:a},e.children)}},7985:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/15/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-15.md","source":"@site/blog/2023-07-15.md","title":"A New Name","description":"Hey everyone,","date":"2023-07-15T00:00:00.000Z","tags":[{"inline":true,"label":"poll results","permalink":"/blog/tags/poll-results"},{"inline":true,"label":"renaming app","permalink":"/blog/tags/renaming-app"},{"inline":true,"label":"community feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"GameStash","permalink":"/blog/tags/game-stash"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameShelf","permalink":"/blog/tags/game-shelf"},{"inline":true,"label":"Harbor","permalink":"/blog/tags/harbor"},{"inline":true,"label":"GameHub","permalink":"/blog/tags/game-hub"},{"inline":true,"label":"market analysis","permalink":"/blog/tags/market-analysis"},{"inline":true,"label":"new name announcement","permalink":"/blog/tags/new-name-announcement"},{"inline":true,"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain"},{"inline":true,"label":"special thanks","permalink":"/blog/tags/special-thanks"},{"inline":true,"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast"},{"inline":true,"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter"},{"inline":true,"label":"transition process","permalink":"/blog/tags/transition-process"}],"readingTime":3.85,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A New Name","authors":["alfagun74"],"tags":["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},"unlisted":false,"prevItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"},"nextItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"}}')}}]); \ No newline at end of file diff --git a/assets/js/89db6d1d.830f4491.js b/assets/js/89db6d1d.830f4491.js deleted file mode 100644 index 6e6dcdb3e..000000000 --- a/assets/js/89db6d1d.830f4491.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5855],{9402:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>r,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>m});var t=n(2676),l=n(8358);const o={title:"A New Name",authors:["alfagun74"],tags:["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},s=void 0,i={permalink:"/blog/2023/07/15/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-15.md",source:"@site/blog/2023-07-15.md",title:"A New Name",description:"Hey everyone,",date:"2023-07-15T00:00:00.000Z",tags:[{inline:!0,label:"poll results",permalink:"/blog/tags/poll-results"},{inline:!0,label:"renaming app",permalink:"/blog/tags/renaming-app"},{inline:!0,label:"community feedback",permalink:"/blog/tags/community-feedback"},{inline:!0,label:"GameStash",permalink:"/blog/tags/game-stash"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"GameShelf",permalink:"/blog/tags/game-shelf"},{inline:!0,label:"Harbor",permalink:"/blog/tags/harbor"},{inline:!0,label:"GameHub",permalink:"/blog/tags/game-hub"},{inline:!0,label:"market analysis",permalink:"/blog/tags/market-analysis"},{inline:!0,label:"new name announcement",permalink:"/blog/tags/new-name-announcement"},{inline:!0,label:"GameVault domain",permalink:"/blog/tags/game-vault-domain"},{inline:!0,label:"special thanks",permalink:"/blog/tags/special-thanks"},{inline:!0,label:"Selfhosted Podcast",permalink:"/blog/tags/selfhosted-podcast"},{inline:!0,label:"Self-Hosted Newsletter",permalink:"/blog/tags/self-hosted-newsletter"},{inline:!0,label:"transition process",permalink:"/blog/tags/transition-process"}],readingTime:3.85,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"A New Name",authors:["alfagun74"],tags:["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},unlisted:!1,prevItem:{title:"Quick Migration Update and new Logo",permalink:"/blog/2023/07/19/"},nextItem:{title:"A Closer Look at GameVaults 'Source-Available' Nature",permalink:"/blog/2023/07/13/"}},r={authorsImageUrls:[void 0]},m=[];function c(e){const a={p:"p",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:"Hey everyone,"}),"\n",(0,t.jsx)(a.p,{children:"We are thrilled to announce that the poll for choosing a new name for our app is finally over. The process of transitioning to the new name will commence very soon, and we can't wait to share the exciting updates with you."})]})}function u(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8358:(e,a,n)=>{n.d(a,{Z:()=>i,a:()=>s});var t=n(5271);const l={},o=t.createContext(l);function s(e){const a=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),t.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8a3716b4.f601d9b6.js b/assets/js/8a3716b4.ac7a2898.js similarity index 85% rename from assets/js/8a3716b4.f601d9b6.js rename to assets/js/8a3716b4.ac7a2898.js index aacd488a5..32065805b 100644 --- a/assets/js/8a3716b4.f601d9b6.js +++ b/assets/js/8a3716b4.ac7a2898.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5059],{7858:a=>{a.exports=JSON.parse('{"tag":{"label":"metadata framework","permalink":"/blog/tags/metadata-framework","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/metadata-framework","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3503],{4453:a=>{a.exports=JSON.parse('{"tag":{"label":"metadata framework","permalink":"/blog/tags/metadata-framework","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/metadata-framework","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8a3c85db.0ea59cd7.js b/assets/js/8a3c85db.0ea59cd7.js deleted file mode 100644 index 734f375b9..000000000 --- a/assets/js/8a3c85db.0ea59cd7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[235],{6381:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-domain","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8a3c85db.e7acb88a.js b/assets/js/8a3c85db.e7acb88a.js new file mode 100644 index 000000000..5047ad87f --- /dev/null +++ b/assets/js/8a3c85db.e7acb88a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8611],{3658:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-domain","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8b8fd5aa.88742189.js b/assets/js/8b8fd5aa.88742189.js deleted file mode 100644 index 29dc328cd..000000000 --- a/assets/js/8b8fd5aa.88742189.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1151],{393:l=>{l.exports=JSON.parse('{"tag":{"label":"polls","permalink":"/blog/tags/polls","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/polls","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8b8fd5aa.9d70c1ec.js b/assets/js/8b8fd5aa.9d70c1ec.js new file mode 100644 index 000000000..60c73c5b8 --- /dev/null +++ b/assets/js/8b8fd5aa.9d70c1ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1172],{8707:l=>{l.exports=JSON.parse('{"tag":{"label":"polls","permalink":"/blog/tags/polls","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/polls","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8ba18f4f.52640931.js b/assets/js/8ba18f4f.52640931.js new file mode 100644 index 000000000..d809b35de --- /dev/null +++ b/assets/js/8ba18f4f.52640931.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5735],{9696:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"server-docs/parental-control","title":"Parental Control","description":"GameVault supports a parental control feature that hides games and game progresses based on the games age rating for some users. By default, age restrictions are disabled.","source":"@site/docs/server-docs/parental-control.md","sourceDirName":"server-docs","slug":"/server-docs/parental-control","permalink":"/docs/server-docs/parental-control","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/parental-control.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":10,"frontMatter":{"sidebar_position":10},"sidebar":"docs","previous":{"title":"Plugins","permalink":"/docs/server-docs/plugins"},"next":{"title":"Server News","permalink":"/docs/server-docs/server-news"}}');var s=n(6070),a=n(8591);const i={sidebar_position:10},o="Parental Control",l={},d=[{value:"Enabling Parental Control",id:"enabling-parental-control",level:2},{value:"Changing the Age of Majority",id:"changing-the-age-of-majority",level:2},{value:"Overriding the Age Rating of a Game",id:"overriding-the-age-rating-of-a-game",level:2}];function c(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"parental-control",children:"Parental Control"})}),"\n",(0,s.jsxs)(t.p,{children:["GameVault supports a parental control feature that ",(0,s.jsx)(t.strong,{children:"hides"})," games and game progresses based on the games age rating for some users. ",(0,s.jsx)(t.strong,{children:"By default"}),", age restrictions are ",(0,s.jsx)(t.strong,{children:"disabled"}),"."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.strong,{children:"When enabled:"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Users will ",(0,s.jsx)(t.strong,{children:"not be able"})," to see ",(0,s.jsx)(t.strong,{children:"games"})," above their age rating."]}),"\n",(0,s.jsxs)(t.li,{children:["Users will ",(0,s.jsx)(t.strong,{children:"not be able"})," to see any ",(0,s.jsx)(t.strong,{children:"progresses"})," for games above their age rating."]}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{title:"Things to keep in mind",type:"warning",children:(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["If you ",(0,s.jsx)(t.strong,{children:"enable"})," parental control, ",(0,s.jsx)(t.strong,{children:"do not forget"})," to set the ",(0,s.jsx)(t.strong,{children:"birth date"})," for ",(0,s.jsx)(t.strong,{children:"existing"})," users."]}),"\n",(0,s.jsxs)(t.li,{children:["Children ",(0,s.jsx)(t.strong,{children:"must not"})," be of ",(0,s.jsx)(t.strong,{children:"role"})," ",(0,s.jsx)(t.code,{children:"ADMIN"}),", because they would be able to alter their birth date."]}),"\n",(0,s.jsxs)(t.li,{children:["The age rating value for games is set by the ",(0,s.jsx)(t.strong,{children:"metadata providers you use"}),". It is in your responsibility to check how the providers determine the age rating."]}),"\n",(0,s.jsxs)(t.li,{children:["If you use multiple metadata providers, the provider with the ",(0,s.jsx)(t.strong,{children:"highest priority"})," will be used to determine the age rating. ",(0,s.jsx)(t.strong,{children:"User-set"})," age ratings will ",(0,s.jsx)(t.strong,{children:"always override"})," the metadata providers setting. You can check the actively applied minimum age on the game page in your client."]}),"\n"]})}),"\n",(0,s.jsx)(t.h2,{id:"enabling-parental-control",children:"Enabling Parental Control"}),"\n",(0,s.jsxs)(t.p,{children:["To enable parental control, set the ",(0,s.jsx)(t.code,{children:"PARENTAL_AGE_RESTRICTION_ENABLED"})," environment variable to ",(0,s.jsx)(t.code,{children:"true"}),". Then set the birth date for all existing users."]}),"\n",(0,s.jsxs)(t.p,{children:["Keep in mind that, when you set this variable to ",(0,s.jsx)(t.code,{children:"true"}),", new users will also be required to set their Birth date upon registration."]}),"\n",(0,s.jsx)(t.h2,{id:"changing-the-age-of-majority",children:"Changing the Age of Majority"}),"\n",(0,s.jsxs)(t.p,{children:["The age of majority determines the age at which an individual is legally recognized as an adult. Reaching the age of majority ",(0,s.jsx)(t.strong,{children:"enables users to alter their birth date"}),". Otherwise, users will not be able to set their own birth date and an admin will be required to set their birth date."]}),"\n",(0,s.jsxs)(t.p,{children:["You can configure the age of majority for parental control by setting the ",(0,s.jsx)(t.code,{children:"PARENTAL_AGE_OF_MAJORITY"})," environment variable. The default value is ",(0,s.jsx)(t.code,{children:"18"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"overriding-the-age-rating-of-a-game",children:"Overriding the Age Rating of a Game"}),"\n",(0,s.jsx)(t.p,{children:"Admins can override the age rating of a single game by simply editing the age rating field of a game directly."})]})}function h(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>o});var r=n(758);const s={},a=r.createContext(s);function i(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ba18f4f.bf6e5915.js b/assets/js/8ba18f4f.bf6e5915.js deleted file mode 100644 index f87199695..000000000 --- a/assets/js/8ba18f4f.bf6e5915.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[147],{8508:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var r=n(2676),s=n(8358);const a={sidebar_position:10},i="Parental Control",o={id:"server-docs/parental-control",title:"Parental Control",description:"GameVault supports a parental control feature that hides games and game progresses based on the games age rating for some users. By default, age restrictions are disabled.",source:"@site/docs/server-docs/parental-control.md",sourceDirName:"server-docs",slug:"/server-docs/parental-control",permalink:"/docs/server-docs/parental-control",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/parental-control.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:10,frontMatter:{sidebar_position:10},sidebar:"docs",previous:{title:"Plugins",permalink:"/docs/server-docs/plugins"},next:{title:"Server News",permalink:"/docs/server-docs/server-news"}},l={},d=[{value:"Enabling Parental Control",id:"enabling-parental-control",level:2},{value:"Changing the Age of Majority",id:"changing-the-age-of-majority",level:2},{value:"Overriding the Age Rating of a Game",id:"overriding-the-age-rating-of-a-game",level:2}];function c(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"parental-control",children:"Parental Control"})}),"\n",(0,r.jsxs)(t.p,{children:["GameVault supports a parental control feature that ",(0,r.jsx)(t.strong,{children:"hides"})," games and game progresses based on the games age rating for some users. ",(0,r.jsx)(t.strong,{children:"By default"}),", age restrictions are ",(0,r.jsx)(t.strong,{children:"disabled"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"When enabled:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Users will ",(0,r.jsx)(t.strong,{children:"not be able"})," to see ",(0,r.jsx)(t.strong,{children:"games"})," above their age rating."]}),"\n",(0,r.jsxs)(t.li,{children:["Users will ",(0,r.jsx)(t.strong,{children:"not be able"})," to see any ",(0,r.jsx)(t.strong,{children:"progresses"})," for games above their age rating."]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{title:"Things to keep in mind",type:"warning",children:(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["If you ",(0,r.jsx)(t.strong,{children:"enable"})," parental control, ",(0,r.jsx)(t.strong,{children:"do not forget"})," to set the ",(0,r.jsx)(t.strong,{children:"birth date"})," for ",(0,r.jsx)(t.strong,{children:"existing"})," users."]}),"\n",(0,r.jsxs)(t.li,{children:["Children ",(0,r.jsx)(t.strong,{children:"must not"})," be of ",(0,r.jsx)(t.strong,{children:"role"})," ",(0,r.jsx)(t.code,{children:"ADMIN"}),", because they would be able to alter their birth date."]}),"\n",(0,r.jsxs)(t.li,{children:["The age rating value for games is set by the ",(0,r.jsx)(t.strong,{children:"metadata providers you use"}),". It is in your responsibility to check how the providers determine the age rating."]}),"\n",(0,r.jsxs)(t.li,{children:["If you use multiple metadata providers, the provider with the ",(0,r.jsx)(t.strong,{children:"highest priority"})," will be used to determine the age rating. ",(0,r.jsx)(t.strong,{children:"User-set"})," age ratings will ",(0,r.jsx)(t.strong,{children:"always override"})," the metadata providers setting. You can check the actively applied minimum age on the game page in your client."]}),"\n"]})}),"\n",(0,r.jsx)(t.h2,{id:"enabling-parental-control",children:"Enabling Parental Control"}),"\n",(0,r.jsxs)(t.p,{children:["To enable parental control, set the ",(0,r.jsx)(t.code,{children:"PARENTAL_AGE_RESTRICTION_ENABLED"})," environment variable to ",(0,r.jsx)(t.code,{children:"true"}),". Then set the birth date for all existing users."]}),"\n",(0,r.jsxs)(t.p,{children:["Keep in mind that, when you set this variable to ",(0,r.jsx)(t.code,{children:"true"}),", new users will also be required to set their Birth date upon registration."]}),"\n",(0,r.jsx)(t.h2,{id:"changing-the-age-of-majority",children:"Changing the Age of Majority"}),"\n",(0,r.jsxs)(t.p,{children:["The age of majority determines the age at which an individual is legally recognized as an adult. Reaching the age of majority ",(0,r.jsx)(t.strong,{children:"enables users to alter their birth date"}),". Otherwise, users will not be able to set their own birth date and an admin will be required to set their birth date."]}),"\n",(0,r.jsxs)(t.p,{children:["You can configure the age of majority for parental control by setting the ",(0,r.jsx)(t.code,{children:"PARENTAL_AGE_OF_MAJORITY"})," environment variable. The default value is ",(0,r.jsx)(t.code,{children:"18"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"overriding-the-age-rating-of-a-game",children:"Overriding the Age Rating of a Game"}),"\n",(0,r.jsx)(t.p,{children:"Admins can override the age rating of a single game by simply editing the age rating field of a game directly."})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var r=n(5271);const s={},a=r.createContext(s);function i(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8c4108df.5a581c4b.js b/assets/js/8c4108df.5a581c4b.js deleted file mode 100644 index c3957d32f..000000000 --- a/assets/js/8c4108df.5a581c4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4145],{9287:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var s=o(2676),t=o(8358);const r={title:"Using Docker Compose",sidebar_position:2},i=void 0,a={id:"server-docs/setup/docker-compose",title:"Using Docker Compose",description:"Docker is a platform for developing, shipping, and running applications in containers, and Docker Compose is a tool for defining and managing multi-container Docker applications.",source:"@site/docs/server-docs/setup/docker-compose.md",sourceDirName:"server-docs/setup",slug:"/server-docs/setup/docker-compose",permalink:"/docs/server-docs/setup/docker-compose",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/docker-compose.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:2,frontMatter:{title:"Using Docker Compose",sidebar_position:2},sidebar:"docs",previous:{title:"Setting up a GameVault Server",permalink:"/docs/server-docs/setup/"},next:{title:"Using CapRover",permalink:"/docs/server-docs/setup/caprover"}},l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Creating a Docker Compose file",id:"step-1-creating-a-docker-compose-file",level:2},{value:"Tips for Running Docker on Windows",id:"tips-for-running-docker-on-windows",level:3},{value:"Alternative Step 1: Running without a PostgreSQL Database",id:"alternative-step-1-running-without-a-postgresql-database",level:3},{value:"Step 2: Start the Service",id:"step-2-start-the-service",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the server",id:"stopping-the-server",level:3},{value:"Reading the logs",id:"reading-the-logs",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://www.docker.com",children:"Docker"})," is a platform for developing, shipping, and running applications in containers, and ",(0,s.jsx)(n.a,{href:"https://docs.docker.com/compose",children:"Docker Compose"})," is a tool for defining and managing multi-container Docker applications."]}),"\n",(0,s.jsx)(n.p,{children:"In this guide, you will learn how to set up GameVault using Docker and Docker Compose."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.docker.com/engine/install/",children:"Docker Engine"})," is installed on your system. (",(0,s.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker Desktop"})," should work too, but this guide is tailored for Docker Engine. Steps might look different on Desktop, but the gist is the same.)"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"step-1-creating-a-docker-compose-file",children:"Step 1: Creating a Docker Compose file"}),"\n",(0,s.jsxs)(n.p,{children:["Create a new file named ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," in a directory of your choice and copy the following code:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"services:\n gamevault-backend:\n image: phalcode/gamevault-backend:latest\n restart: unless-stopped\n environment:\n DB_HOST: db\n DB_USERNAME: gamevault\n DB_PASSWORD: YOURPASSWORDHERE\n volumes:\n # Mount the folder where your games are\n - /your/games/folder:/files\n # Mount the folder where GameVault should store its media\n - /your/media/folder:/media\n ports:\n - 8080:8080/tcp\n db:\n image: postgres:16\n restart: unless-stopped\n environment:\n POSTGRES_USER: gamevault\n POSTGRES_PASSWORD: YOURPASSWORDHERE\n POSTGRES_DB: gamevault\n volumes:\n # Mount the folder where your PostgreSQL database files should land\n - /your/database/folder:/var/lib/postgresql/data\n"})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Replace the variables (",(0,s.jsx)(n.code,{children:"YOURPASSWORDHERE"}),", ",(0,s.jsx)(n.code,{children:"etc."}),"), as well as the folder paths with what suits you, of course. You can change the port on the left side of the colon aswell."]})}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"Password (YOURPASSWORDHERE) can't be empty! else the database will not work. If you don't want a password, consider running without a PostgreSQL Database (Not recommended)"})}),"\n",(0,s.jsx)(n.h3,{id:"tips-for-running-docker-on-windows",children:"Tips for Running Docker on Windows"}),"\n",(0,s.jsxs)(n.p,{children:["The above ",(0,s.jsx)(n.code,{children:"docker-compose.yaml"})," file might not work as expected with Docker for Windows. Here are some things to consider to make it compatible:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Use Forward Slashes in Paths"}),": In your volumes, replace Windows-style backslashes (",(0,s.jsx)(n.code,{children:"\\"}),") with forward slashes (",(0,s.jsx)(n.code,{children:"/"}),")."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"volumes:\n # Path to your games folder\n - C:/Your/Games/Folder:/files\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"PostgreSQL Database Volume"}),": For PostgreSQL, it\u2019s often better to use a Docker volume instead of mounting a folder, due to compatibility issues of PostgreSQL with Windows Filesystems. To do this, leave out any volume definition in the database section of your YAML file. ",(0,s.jsx)(n.a,{href:"https://github.com/docker-library/postgres/issues/116",children:"Read more here"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"alternative-step-1-running-without-a-postgresql-database",children:"Alternative Step 1: Running without a PostgreSQL Database"}),"\n",(0,s.jsx)(n.p,{children:"We don't recommend it, but you can run GameVault without a PostgreSQL Database too using the following configuration:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'services:\n gamevault-backend:\n image: phalcode/gamevault-backend:latest\n restart: unless-stopped\n environment:\n DB_SYSTEM: "SQLITE"\n volumes:\n - /your/games/folder:/files\n - /your/media/folder:/media\n - /your/sqlite/database/folder:/db\n ports:\n - 8080:8080/tcp\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Replace the variables (",(0,s.jsx)(n.code,{children:"YOURPASSWORDHERE"}),", ",(0,s.jsx)(n.code,{children:"etc."}),"), as well as the folder paths with what suits you, of course. You can change the port on the left side of the colon aswell."]})}),"\n",(0,s.jsx)(n.h2,{id:"step-2-start-the-service",children:"Step 2: Start the Service"}),"\n",(0,s.jsxs)(n.p,{children:["Open a terminal, navigate to the directory where the ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," file is located, and run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker compose up -d\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This will start the GameVault server and PostgreSQL server in the background. The ",(0,s.jsx)(n.code,{children:"-d"})," parameter detaches the process from the terminal."]}),"\n",(0,s.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsxs)(n.p,{children:["Congratulations! Your GameVault Server has been successfully set up using Docker and Docker Compose. You can now access it using your server's IP address followed by the designated port, such as ",(0,s.jsx)(n.code,{children:"http://192.168.0.15:8080"})," for example."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,s.jsx)(n.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,s.jsx)(n.h3,{id:"stopping-the-server",children:"Stopping the server"}),"\n",(0,s.jsxs)(n.p,{children:["Open a terminal, navigate to the directory where the ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," file is located, and run the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker compose down\n"})}),"\n",(0,s.jsx)(n.h3,{id:"reading-the-logs",children:"Reading the logs"}),"\n",(0,s.jsx)(n.p,{children:"Open a terminal and run the following command:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker logs gamevault-backend\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8358:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>i});var s=o(5271);const t={},r=s.createContext(t);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8c4108df.fa37aed9.js b/assets/js/8c4108df.fa37aed9.js new file mode 100644 index 000000000..60aed347a --- /dev/null +++ b/assets/js/8c4108df.fa37aed9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[179],{8794:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"server-docs/setup/docker-compose","title":"Using Docker Compose","description":"Docker is a platform for developing, shipping, and running applications in containers, and Docker Compose is a tool for defining and managing multi-container Docker applications.","source":"@site/docs/server-docs/setup/docker-compose.md","sourceDirName":"server-docs/setup","slug":"/server-docs/setup/docker-compose","permalink":"/docs/server-docs/setup/docker-compose","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/docker-compose.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":2,"frontMatter":{"title":"Using Docker Compose","sidebar_position":2},"sidebar":"docs","previous":{"title":"Setting up a GameVault Server","permalink":"/docs/server-docs/setup/"},"next":{"title":"Using CapRover","permalink":"/docs/server-docs/setup/caprover"}}');var t=o(6070),r=o(8591);const i={title:"Using Docker Compose",sidebar_position:2},a=void 0,l={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Creating a Docker Compose file",id:"step-1-creating-a-docker-compose-file",level:2},{value:"Tips for Running Docker on Windows",id:"tips-for-running-docker-on-windows",level:3},{value:"Alternative Step 1: Running without a PostgreSQL Database",id:"alternative-step-1-running-without-a-postgresql-database",level:3},{value:"Step 2: Start the Service",id:"step-2-start-the-service",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the server",id:"stopping-the-server",level:3},{value:"Reading the logs",id:"reading-the-logs",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.docker.com",children:"Docker"})," is a platform for developing, shipping, and running applications in containers, and ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/compose",children:"Docker Compose"})," is a tool for defining and managing multi-container Docker applications."]}),"\n",(0,t.jsx)(n.p,{children:"In this guide, you will learn how to set up GameVault using Docker and Docker Compose."}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://docs.docker.com/engine/install/",children:"Docker Engine"})," is installed on your system. (",(0,t.jsx)(n.a,{href:"https://docs.docker.com/get-docker/",children:"Docker Desktop"})," should work too, but this guide is tailored for Docker Engine. Steps might look different on Desktop, but the gist is the same.)"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"step-1-creating-a-docker-compose-file",children:"Step 1: Creating a Docker Compose file"}),"\n",(0,t.jsxs)(n.p,{children:["Create a new file named ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," in a directory of your choice and copy the following code:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"services:\n gamevault-backend:\n image: phalcode/gamevault-backend:latest\n restart: unless-stopped\n environment:\n DB_HOST: db\n DB_USERNAME: gamevault\n DB_PASSWORD: YOURPASSWORDHERE\n volumes:\n # Mount the folder where your games are\n - /your/games/folder:/files\n # Mount the folder where GameVault should store its media\n - /your/media/folder:/media\n ports:\n - 8080:8080/tcp\n db:\n image: postgres:16\n restart: unless-stopped\n environment:\n POSTGRES_USER: gamevault\n POSTGRES_PASSWORD: YOURPASSWORDHERE\n POSTGRES_DB: gamevault\n volumes:\n # Mount the folder where your PostgreSQL database files should land\n - /your/database/folder:/var/lib/postgresql/data\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Replace the variables (",(0,t.jsx)(n.code,{children:"YOURPASSWORDHERE"}),", ",(0,t.jsx)(n.code,{children:"etc."}),"), as well as the folder paths with what suits you, of course. You can change the port on the left side of the colon aswell."]})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"Password (YOURPASSWORDHERE) can't be empty! else the database will not work. If you don't want a password, consider running without a PostgreSQL Database (Not recommended)"})}),"\n",(0,t.jsx)(n.h3,{id:"tips-for-running-docker-on-windows",children:"Tips for Running Docker on Windows"}),"\n",(0,t.jsxs)(n.p,{children:["The above ",(0,t.jsx)(n.code,{children:"docker-compose.yaml"})," file might not work as expected with Docker for Windows. Here are some things to consider to make it compatible:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Use Forward Slashes in Paths"}),": In your volumes, replace Windows-style backslashes (",(0,t.jsx)(n.code,{children:"\\"}),") with forward slashes (",(0,t.jsx)(n.code,{children:"/"}),")."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"volumes:\n # Path to your games folder\n - C:/Your/Games/Folder:/files\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"PostgreSQL Database Volume"}),": For PostgreSQL, it\u2019s often better to use a Docker volume instead of mounting a folder, due to compatibility issues of PostgreSQL with Windows Filesystems. To do this, leave out any volume definition in the database section of your YAML file. ",(0,t.jsx)(n.a,{href:"https://github.com/docker-library/postgres/issues/116",children:"Read more here"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"alternative-step-1-running-without-a-postgresql-database",children:"Alternative Step 1: Running without a PostgreSQL Database"}),"\n",(0,t.jsx)(n.p,{children:"We don't recommend it, but you can run GameVault without a PostgreSQL Database too using the following configuration:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'services:\n gamevault-backend:\n image: phalcode/gamevault-backend:latest\n restart: unless-stopped\n environment:\n DB_SYSTEM: "SQLITE"\n volumes:\n - /your/games/folder:/files\n - /your/media/folder:/media\n - /your/sqlite/database/folder:/db\n ports:\n - 8080:8080/tcp\n'})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["Replace the variables (",(0,t.jsx)(n.code,{children:"YOURPASSWORDHERE"}),", ",(0,t.jsx)(n.code,{children:"etc."}),"), as well as the folder paths with what suits you, of course. You can change the port on the left side of the colon aswell."]})}),"\n",(0,t.jsx)(n.h2,{id:"step-2-start-the-service",children:"Step 2: Start the Service"}),"\n",(0,t.jsxs)(n.p,{children:["Open a terminal, navigate to the directory where the ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file is located, and run the following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose up -d\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This will start the GameVault server and PostgreSQL server in the background. The ",(0,t.jsx)(n.code,{children:"-d"})," parameter detaches the process from the terminal."]}),"\n",(0,t.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsxs)(n.p,{children:["Congratulations! Your GameVault Server has been successfully set up using Docker and Docker Compose. You can now access it using your server's IP address followed by the designated port, such as ",(0,t.jsx)(n.code,{children:"http://192.168.0.15:8080"})," for example."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,t.jsx)(n.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,t.jsx)(n.h3,{id:"stopping-the-server",children:"Stopping the server"}),"\n",(0,t.jsxs)(n.p,{children:["Open a terminal, navigate to the directory where the ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file is located, and run the following command:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose down\n"})}),"\n",(0,t.jsx)(n.h3,{id:"reading-the-logs",children:"Reading the logs"}),"\n",(0,t.jsx)(n.p,{children:"Open a terminal and run the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker logs gamevault-backend\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8591:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>a});var s=o(758);const t={},r=s.createContext(t);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8e064018.192c037f.js b/assets/js/8e064018.c581259a.js similarity index 86% rename from assets/js/8e064018.192c037f.js rename to assets/js/8e064018.c581259a.js index a73238004..6bdeb09dc 100644 --- a/assets/js/8e064018.192c037f.js +++ b/assets/js/8e064018.c581259a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1691],{7614:e=>{e.exports=JSON.parse('{"tag":{"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/celebration-of-achievements","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3163],{8232:e=>{e.exports=JSON.parse('{"tag":{"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/celebration-of-achievements","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8ea09047.3c33b70a.js b/assets/js/8ea09047.3c33b70a.js new file mode 100644 index 000000000..2411fd1b5 --- /dev/null +++ b/assets/js/8ea09047.3c33b70a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9385],{600:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":16,"previousPage":"/blog","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8ea09047.8882bedc.js b/assets/js/8ea09047.8882bedc.js deleted file mode 100644 index 512c35ff3..000000000 --- a/assets/js/8ea09047.8882bedc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8644],{7362:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":16,"previousPage":"/blog","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8f8e2e78.9c2f6ed8.js b/assets/js/8f8e2e78.6fe8f6f5.js similarity index 85% rename from assets/js/8f8e2e78.9c2f6ed8.js rename to assets/js/8f8e2e78.6fe8f6f5.js index 946c018b5..9ccd3e491 100644 --- a/assets/js/8f8e2e78.9c2f6ed8.js +++ b/assets/js/8f8e2e78.6fe8f6f5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8407],{5016:e=>{e.exports=JSON.parse('{"tag":{"label":"future development","permalink":"/blog/tags/future-development","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/future-development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1142],{2884:e=>{e.exports=JSON.parse('{"tag":{"label":"future development","permalink":"/blog/tags/future-development","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/future-development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/8ff99662.58f8bcce.js b/assets/js/8ff99662.2ec05f81.js similarity index 84% rename from assets/js/8ff99662.58f8bcce.js rename to assets/js/8ff99662.2ec05f81.js index 8b105bdba..2fc2da2a5 100644 --- a/assets/js/8ff99662.58f8bcce.js +++ b/assets/js/8ff99662.2ec05f81.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8489],{4233:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault app","permalink":"/blog/tags/game-vault-app","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-app","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6355],{4466:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault app","permalink":"/blog/tags/game-vault-app","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-app","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9019cc36.071ddb15.js b/assets/js/9019cc36.071ddb15.js deleted file mode 100644 index 28245be3c..000000000 --- a/assets/js/9019cc36.071ddb15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9565],{2716:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var a=n(2676),r=n(8358);const i={title:"An update so major, we could have built the product from scratch.",authors:["alfagun74"],tags:["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},o=void 0,s={permalink:"/blog/2024/10/20/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-10-20.md",source:"@site/blog/2024-10-20.md",title:"An update so major, we could have built the product from scratch.",description:"Hello, GameVault Community!",date:"2024-10-20T00:00:00.000Z",tags:[{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"Client Update",permalink:"/blog/tags/client-update"},{inline:!0,label:"Server Update",permalink:"/blog/tags/server-update"},{inline:!0,label:"metadata framework",permalink:"/blog/tags/metadata-framework"},{inline:!0,label:"plugin system",permalink:"/blog/tags/plugin-system"},{inline:!0,label:"parental control",permalink:"/blog/tags/parental-control"},{inline:!0,label:"age restrictions",permalink:"/blog/tags/age-restrictions"},{inline:!0,label:"theme",permalink:"/blog/tags/theme"},{inline:!0,label:"app optimization",permalink:"/blog/tags/app-optimization"},{inline:!0,label:"analytics",permalink:"/blog/tags/analytics"},{inline:!0,label:"notes",permalink:"/blog/tags/notes"},{inline:!0,label:"community management",permalink:"/blog/tags/community-management"}],readingTime:2.515,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"An update so major, we could have built the product from scratch.",authors:["alfagun74"],tags:["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},unlisted:!1,nextItem:{title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",permalink:"/blog/2024/05/07/"}},l={authorsImageUrls:[void 0]},d=[{value:"What\u2019s New?",id:"whats-new",level:3},{value:"Major New Features",id:"major-new-features",level:3},{value:"Critical Update Info",id:"critical-update-info",level:3},{value:"Support Us",id:"support-us",level:3}];function u(e){const t={a:"a",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:(0,a.jsx)(t.strong,{children:"Hello, GameVault Community!"})}),"\n",(0,a.jsxs)(t.p,{children:["After six months of hard work, we\u2019re beyond excited to unveil our biggest update yet: ",(0,a.jsx)(t.strong,{children:"GameVault Client v1.12"})," and ",(0,a.jsx)(t.strong,{children:"GameVault Server v13"}),"! This release is so massive, it feels like we could\u2019ve built the product from scratch\u2014there\u2019s that much new ground covered. "]}),"\n",(0,a.jsx)(t.h3,{id:"whats-new",children:"What\u2019s New?"}),"\n",(0,a.jsxs)(t.p,{children:["We\u2019ve introduced some game-changing improvements. First and foremost, we\u2019ve moved away from unreliable third-party tools like RAWG and Google Image Scrapers for fetching video game metadata. Instead of just swapping one provider for another and making us dependant again, we\u2019ve built something much better: a brand-new ",(0,a.jsx)(t.strong,{children:"plugin system"})," on the backend, complete with an official partnership with ",(0,a.jsx)(t.strong,{children:"IGDB/Twitch"}),"."]}),"\n",(0,a.jsx)(t.p,{children:"The new plugin framework is incredibly flexible, allowing users to write their own metadata provider plugins. It supports an unlimited number of providers, prioritizes data effectively, and even fills in any gaps intelligently. And the cherry on top? Users now have full control over metadata\u2014if you want to tweak or edit a piece of info, you can do so without changing the source data. Your custom edits are saved separately, giving you full freedom."}),"\n",(0,a.jsx)(t.p,{children:"We\u2019ve been rigorously testing this system for 2\u20133 months, running an early access phase for about a month. While we\u2019ve optimized it as much as possible, we ask for your patience if any bugs pop up\u2014mastillke sure to back up before migrating!"}),"\n",(0,a.jsx)(t.h3,{id:"major-new-features",children:"Major New Features"}),"\n",(0,a.jsx)(t.p,{children:"Here\u2019s a quick rundown of some other incredible additions in this update:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Parental Controls & Age Restrictions:"})," Now, families can manage access based on age-appropriate content, giving more control over what\u2019s playable and viewable for children."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Built-in Media Player:"})," You can now watch trailers and gameplay videos directly in GameVault."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"UI Overhaul:"})," We\u2019ve refreshed the Game, Community, and Admin Tabs, along with a redesigned App Bar for a sleeker look."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Halloween Theme:"})," Just in time for spooky season! GameVault+ users can enjoy a themed Halloween skin."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Convenience Features:"})," We\u2019ve added default arguments and launch/install executables to streamline app functionality."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Markdown Support:"})," Both Notes and Server News now support markdown, making formatting a breeze and improving readability."]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"critical-update-info",children:"Critical Update Info"}),"\n",(0,a.jsx)(t.p,{children:"Before updating, please ensure compatibility between clients and servers:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Client v1.12"})," is required for servers running ",(0,a.jsx)(t.strong,{children:"v13 or above"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["Older clients (",(0,a.jsx)(t.strong,{children:"before v1.12"}),") won\u2019t work with server running on ",(0,a.jsx)(t.strong,{children:"Version 13 or above"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["For a smooth update and a guide on how to use all these new features, check out the detailed ",(0,a.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-backend/blob/master/CHANGELOG.md#1300",children:"migration instructions"})," in the server changelogs. As always, if you hit any snags, feel free to reach out to us on ",(0,a.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),"."]}),"\n",(0,a.jsx)(t.h3,{id:"support-us",children:"Support Us"}),"\n",(0,a.jsxs)(t.p,{children:["If you\u2019d like to support our development and help us keep most of GameVault\u2019s features free, consider ",(0,a.jsxs)(t.a,{href:"https://gamevau.lt/gamevault-plus",children:["subscribing to ",(0,a.jsx)(t.strong,{children:"GameVault+"})]})," or making ",(0,a.jsx)(t.a,{href:"https://phalco.de/support-us",children:"a one-time donation"}),". Although GameVault+ at the time only offers a limited set premium features, your support helps us continue making the app accessible to all."]}),"\n",(0,a.jsx)(t.p,{children:"Thank you all for supporting and using our passion project! We hope you enjoy the latest features and enhancements we've added."})]})}function c(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var a=n(5271);const r={},i=a.createContext(r);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9019cc36.cbcaeb75.js b/assets/js/9019cc36.cbcaeb75.js new file mode 100644 index 000000000..0e27b4c00 --- /dev/null +++ b/assets/js/9019cc36.cbcaeb75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8095],{8216:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var a=n(7666),r=n(6070),i=n(8591);const o={title:"An update so major, we could have built the product from scratch.",authors:["alfagun74"],tags:["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},s=void 0,l={authorsImageUrls:[void 0]},u=[{value:"What\u2019s New?",id:"whats-new",level:3},{value:"Major New Features",id:"major-new-features",level:3},{value:"Critical Update Info",id:"critical-update-info",level:3},{value:"Support Us",id:"support-us",level:3}];function d(e){const t={a:"a",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Hello, GameVault Community!"})}),"\n",(0,r.jsxs)(t.p,{children:["After six months of hard work, we\u2019re beyond excited to unveil our biggest update yet: ",(0,r.jsx)(t.strong,{children:"GameVault Client v1.12"})," and ",(0,r.jsx)(t.strong,{children:"GameVault Server v13"}),"! This release is so massive, it feels like we could\u2019ve built the product from scratch\u2014there\u2019s that much new ground covered. "]}),"\n",(0,r.jsx)(t.h3,{id:"whats-new",children:"What\u2019s New?"}),"\n",(0,r.jsxs)(t.p,{children:["We\u2019ve introduced some game-changing improvements. First and foremost, we\u2019ve moved away from unreliable third-party tools like RAWG and Google Image Scrapers for fetching video game metadata. Instead of just swapping one provider for another and making us dependant again, we\u2019ve built something much better: a brand-new ",(0,r.jsx)(t.strong,{children:"plugin system"})," on the backend, complete with an official partnership with ",(0,r.jsx)(t.strong,{children:"IGDB/Twitch"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"The new plugin framework is incredibly flexible, allowing users to write their own metadata provider plugins. It supports an unlimited number of providers, prioritizes data effectively, and even fills in any gaps intelligently. And the cherry on top? Users now have full control over metadata\u2014if you want to tweak or edit a piece of info, you can do so without changing the source data. Your custom edits are saved separately, giving you full freedom."}),"\n",(0,r.jsx)(t.p,{children:"We\u2019ve been rigorously testing this system for 2\u20133 months, running an early access phase for about a month. While we\u2019ve optimized it as much as possible, we ask for your patience if any bugs pop up\u2014mastillke sure to back up before migrating!"}),"\n",(0,r.jsx)(t.h3,{id:"major-new-features",children:"Major New Features"}),"\n",(0,r.jsx)(t.p,{children:"Here\u2019s a quick rundown of some other incredible additions in this update:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Parental Controls & Age Restrictions:"})," Now, families can manage access based on age-appropriate content, giving more control over what\u2019s playable and viewable for children."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Built-in Media Player:"})," You can now watch trailers and gameplay videos directly in GameVault."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"UI Overhaul:"})," We\u2019ve refreshed the Game, Community, and Admin Tabs, along with a redesigned App Bar for a sleeker look."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Halloween Theme:"})," Just in time for spooky season! GameVault+ users can enjoy a themed Halloween skin."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Convenience Features:"})," We\u2019ve added default arguments and launch/install executables to streamline app functionality."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Markdown Support:"})," Both Notes and Server News now support markdown, making formatting a breeze and improving readability."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"critical-update-info",children:"Critical Update Info"}),"\n",(0,r.jsx)(t.p,{children:"Before updating, please ensure compatibility between clients and servers:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Client v1.12"})," is required for servers running ",(0,r.jsx)(t.strong,{children:"v13 or above"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Older clients (",(0,r.jsx)(t.strong,{children:"before v1.12"}),") won\u2019t work with server running on ",(0,r.jsx)(t.strong,{children:"Version 13 or above"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For a smooth update and a guide on how to use all these new features, check out the detailed ",(0,r.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-backend/blob/master/CHANGELOG.md#1300",children:"migration instructions"})," in the server changelogs. As always, if you hit any snags, feel free to reach out to us on ",(0,r.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"support-us",children:"Support Us"}),"\n",(0,r.jsxs)(t.p,{children:["If you\u2019d like to support our development and help us keep most of GameVault\u2019s features free, consider ",(0,r.jsxs)(t.a,{href:"https://gamevau.lt/gamevault-plus",children:["subscribing to ",(0,r.jsx)(t.strong,{children:"GameVault+"})]})," or making ",(0,r.jsx)(t.a,{href:"https://phalco.de/support-us",children:"a one-time donation"}),". Although GameVault+ at the time only offers a limited set premium features, your support helps us continue making the app accessible to all."]}),"\n",(0,r.jsx)(t.p,{children:"Thank you all for supporting and using our passion project! We hope you enjoy the latest features and enhancements we've added."})]})}function c(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>s});var a=n(758);const r={},i=a.createContext(r);function o(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(i.Provider,{value:t},e.children)}},7666:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/10/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-10-20.md","source":"@site/blog/2024-10-20.md","title":"An update so major, we could have built the product from scratch.","description":"Hello, GameVault Community!","date":"2024-10-20T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Client Update","permalink":"/blog/tags/client-update"},{"inline":true,"label":"Server Update","permalink":"/blog/tags/server-update"},{"inline":true,"label":"metadata framework","permalink":"/blog/tags/metadata-framework"},{"inline":true,"label":"plugin system","permalink":"/blog/tags/plugin-system"},{"inline":true,"label":"parental control","permalink":"/blog/tags/parental-control"},{"inline":true,"label":"age restrictions","permalink":"/blog/tags/age-restrictions"},{"inline":true,"label":"theme","permalink":"/blog/tags/theme"},{"inline":true,"label":"app optimization","permalink":"/blog/tags/app-optimization"},{"inline":true,"label":"analytics","permalink":"/blog/tags/analytics"},{"inline":true,"label":"notes","permalink":"/blog/tags/notes"},{"inline":true,"label":"community management","permalink":"/blog/tags/community-management"}],"readingTime":2.515,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"An update so major, we could have built the product from scratch.","authors":["alfagun74"],"tags":["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},"unlisted":false,"nextItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"}}')}}]); \ No newline at end of file diff --git a/assets/js/9046e000.f43ecc9e.js b/assets/js/9046e000.208ab4b5.js similarity index 84% rename from assets/js/9046e000.f43ecc9e.js rename to assets/js/9046e000.208ab4b5.js index dfbc82033..297e14557 100644 --- a/assets/js/9046e000.f43ecc9e.js +++ b/assets/js/9046e000.208ab4b5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2650],{9205:a=>{a.exports=JSON.parse('{"tag":{"label":"solution","permalink":"/blog/tags/solution","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/solution","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6013],{6231:a=>{a.exports=JSON.parse('{"tag":{"label":"solution","permalink":"/blog/tags/solution","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/solution","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9147d3af.0a76dcd5.js b/assets/js/9147d3af.0a76dcd5.js deleted file mode 100644 index 2bad7045d..000000000 --- a/assets/js/9147d3af.0a76dcd5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5954],{8248:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>i,default:()=>c,frontMatter:()=>l,metadata:()=>s,toc:()=>m});var a=t(2676),o=t(8358);const l={title:"Announcing GameVault+ (coming soon)",authors:["alfagun74"],tags:["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},i=void 0,s={permalink:"/blog/2024/03/28/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-03-28.md",source:"@site/blog/2024-03-28.md",title:"Announcing GameVault+ (coming soon)",description:"Hey Everyone!",date:"2024-03-28T00:00:00.000Z",tags:[{inline:!0,label:"startup",permalink:"/blog/tags/startup"},{inline:!0,label:"software",permalink:"/blog/tags/software"},{inline:!0,label:"gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"subscription model",permalink:"/blog/tags/subscription-model"},{inline:!0,label:"development",permalink:"/blog/tags/development"},{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"announcement",permalink:"/blog/tags/announcement"}],readingTime:3.725,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Announcing GameVault+ (coming soon)",authors:["alfagun74"],tags:["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},unlisted:!1,prevItem:{title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",permalink:"/blog/2024/04/01/2024-04-01/"},nextItem:{title:"Join the GameVault Early-Access Program Now!",permalink:"/blog/2023/12/09/"}},r={authorsImageUrls:[void 0]},m=[];function u(e){const n={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"Hey Everyone!"}),"\n",(0,a.jsxs)(n.p,{children:["It feels like it's been ages since we last caught up regarding the development of ",(0,a.jsx)(n.a,{href:"https://gamevau.lt",children:"GameVault (the self-hostable platform for drm-free videogames)"}),", but trust me, the silence from our end doesn't mean we've been slacking off. In fact,quite the opposite has been happening behind the scenes."]})]})}function c(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},8358:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>i});var a=t(5271);const o={},l=a.createContext(o);function i(e){const n=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9147d3af.b382849a.js b/assets/js/9147d3af.b382849a.js new file mode 100644 index 000000000..923a2d173 --- /dev/null +++ b/assets/js/9147d3af.b382849a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1840],{8396:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var a=n(3696),o=n(6070),l=n(8591);const i={title:"Announcing GameVault+ (coming soon)",authors:["alfagun74"],tags:["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},s=void 0,r={authorsImageUrls:[void 0]},u=[];function m(e){const t={a:"a",p:"p",...(0,l.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,o.jsxs)(t.p,{children:["It feels like it's been ages since we last caught up regarding the development of ",(0,o.jsx)(t.a,{href:"https://gamevau.lt",children:"GameVault (the self-hostable platform for drm-free videogames)"}),", but trust me, the silence from our end doesn't mean we've been slacking off. In fact,quite the opposite has been happening behind the scenes."]})]})}function c(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>s});var a=n(758);const o={},l=a.createContext(o);function i(e){const t=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(l.Provider,{value:t},e.children)}},3696:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/03/28/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-03-28.md","source":"@site/blog/2024-03-28.md","title":"Announcing GameVault+ (coming soon)","description":"Hey Everyone!","date":"2024-03-28T00:00:00.000Z","tags":[{"inline":true,"label":"startup","permalink":"/blog/tags/startup"},{"inline":true,"label":"software","permalink":"/blog/tags/software"},{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription model","permalink":"/blog/tags/subscription-model"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"}],"readingTime":3.725,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Announcing GameVault+ (coming soon)","authors":["alfagun74"],"tags":["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},"unlisted":false,"prevItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"},"nextItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"}}')}}]); \ No newline at end of file diff --git a/assets/js/bcc2422e.cc2251a8.js b/assets/js/915cb6f7.036aa9bc.js similarity index 53% rename from assets/js/bcc2422e.cc2251a8.js rename to assets/js/915cb6f7.036aa9bc.js index 6aa7e80a7..4ad15ad0f 100644 --- a/assets/js/bcc2422e.cc2251a8.js +++ b/assets/js/915cb6f7.036aa9bc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8704],{939:e=>{e.exports=JSON.parse('{"tag":{"label":"UI Redesign","permalink":"/blog/tags/ui-redesign","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/ui-redesign","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[384],{9547:l=>{l.exports=JSON.parse('{"tag":{"label":"April Fools","permalink":"/blog/tags/april-fools","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/april-fools","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/915cb6f7.f5acc05c.js b/assets/js/915cb6f7.f5acc05c.js deleted file mode 100644 index 5ecd471a8..000000000 --- a/assets/js/915cb6f7.f5acc05c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4509],{5532:l=>{l.exports=JSON.parse('{"tag":{"label":"April Fools","permalink":"/blog/tags/april-fools","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/april-fools","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/92440753.444c601f.js b/assets/js/92440753.ce494dc0.js similarity index 85% rename from assets/js/92440753.444c601f.js rename to assets/js/92440753.ce494dc0.js index 4a69c4562..1725be8c5 100644 --- a/assets/js/92440753.444c601f.js +++ b/assets/js/92440753.ce494dc0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3439],{8819:a=>{a.exports=JSON.parse('{"tag":{"label":"financial assistance","permalink":"/blog/tags/financial-assistance","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/financial-assistance","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2873],{4787:a=>{a.exports=JSON.parse('{"tag":{"label":"financial assistance","permalink":"/blog/tags/financial-assistance","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/financial-assistance","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/92fb1dcd.8516da11.js b/assets/js/92fb1dcd.738b9044.js similarity index 84% rename from assets/js/92fb1dcd.8516da11.js rename to assets/js/92fb1dcd.738b9044.js index d31c83be9..6786360e1 100644 --- a/assets/js/92fb1dcd.8516da11.js +++ b/assets/js/92fb1dcd.738b9044.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2908],{6583:a=>{a.exports=JSON.parse('{"tag":{"label":"roadmap","permalink":"/blog/tags/roadmap","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/roadmap","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9552],{6129:a=>{a.exports=JSON.parse('{"tag":{"label":"roadmap","permalink":"/blog/tags/roadmap","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/roadmap","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9404f843.223d7f9d.js b/assets/js/9404f843.223d7f9d.js deleted file mode 100644 index 5dbf264a3..000000000 --- a/assets/js/9404f843.223d7f9d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4811],{7130:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var a=i(2676),t=i(8358);const l={sidebar_position:4,title:"Client APIs"},s=void 0,r={id:"gamevault-plus/client-apis",title:"Client APIs",description:"The GameVault Client APIs offer interfaces for external use of the GameVault client application for subscribers of GameVault+. Whether you're interacting via the command line, URI, or NamedPipe, you have access to various functionalities provided by the GameVault Client Application. This can be useful for third-party developers who want to integrate with the GameVault ecosystem. (e.g. Playnite Extension)",source:"@site/docs/gamevault-plus/client-apis.md",sourceDirName:"gamevault-plus",slug:"/gamevault-plus/client-apis",permalink:"/docs/gamevault-plus/client-apis",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/client-apis.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Client APIs"},sidebar:"docs",previous:{title:"Themes",permalink:"/docs/gamevault-plus/themes"},next:{title:"Licensing and Contributions",permalink:"/docs/license-contribute"}},d={},c=[{value:"Available APIs",id:"available-apis",level:2},{value:"CLI",id:"cli",level:3},{value:"URI",id:"uri",level:3},{value:"NamedPipe",id:"namedpipe",level:3},{value:"Usage",id:"usage",level:2},{value:"Available Actions & Parameters",id:"available-actions--parameters",level:2},{value:"URI "Query" Action",id:"uri-query-action",level:2},{value:"Command-line Examples",id:"command-line-examples",level:2},{value:"URI Examples",id:"uri-examples",level:2},{value:"Query Examples",id:"query-examples",level:2},{value:"C# Code Example",id:"c-code-example",level:2}];function o(e){const n={code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"The GameVault Client APIs offer interfaces for external use of the GameVault client application for subscribers of GameVault+. Whether you're interacting via the command line, URI, or NamedPipe, you have access to various functionalities provided by the GameVault Client Application. This can be useful for third-party developers who want to integrate with the GameVault ecosystem. (e.g. Playnite Extension)"}),"\n",(0,a.jsx)(n.p,{children:"This guide provides comprehensive information on utilizing various interfaces offered by the GameVault client application for third-party developers. Whether you're building extensions or integrating with the GameVault ecosystem, this documentation will guide you through the available APIs and their specifications."}),"\n",(0,a.jsx)(n.h2,{id:"available-apis",children:"Available APIs"}),"\n",(0,a.jsx)(n.h3,{id:"cli",children:"CLI"}),"\n",(0,a.jsx)(n.p,{children:"The Command Line Interface (CLI) provides a straightforward way to interact with the GameVault client application directly from the command line. It supports various actions and parameters for seamless integration into your workflows."}),"\n",(0,a.jsx)(n.h3,{id:"uri",children:"URI"}),"\n",(0,a.jsx)(n.p,{children:"The Uniform Resource Identifier (URI) handler allows for communication with the GameVault client application through custom URI schemes. By leveraging URI endpoints, you can trigger actions and pass parameters conveniently."}),"\n",(0,a.jsx)(n.h3,{id:"namedpipe",children:"NamedPipe"}),"\n",(0,a.jsx)(n.p,{children:"The NamedPipe interface facilitates communication between processes on the same machine. Through NamedPipe, you can send messages to and receive responses from the GameVault client application, enabling real-time interaction."}),"\n",(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsx)(n.p,{children:"The following sections detail how to use each API provided by the GameVault client application."}),"\n",(0,a.jsx)(n.h2,{id:"available-actions--parameters",children:"Available Actions & Parameters"}),"\n",(0,a.jsx)(n.p,{children:"Explore the list of actions and parameters supported by the GameVault client APIs. (Bold parameters are required, Asterisks indicate default values )"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:" "})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Supported for direct command-line usage only."}),"\n",(0,a.jsxs)(n.li,{children:["Alias for ",(0,a.jsx)(n.code,{children:"show"})]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"show"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Starts and if the main application or a specific game."}),"\n",(0,a.jsxs)(n.li,{children:["Parameters:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to show."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"install"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Starts the download of a specific game defined by ",(0,a.jsx)(n.code,{children:"gameid"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Additional parameters:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsxs)(n.strong,{children:[(0,a.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to install."]})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"uninstall"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Uninstalls a specific game defined by ",(0,a.jsx)(n.code,{children:"gameid"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Additional parameters:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsxs)(n.strong,{children:[(0,a.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to uninstall."]})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"start"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Starts a specific game defined by ",(0,a.jsx)(n.code,{children:"gameid"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Additional parameters:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsxs)(n.strong,{children:[(0,a.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to start."]})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"autoinstall=[true/false*]"}),": Whether to automatically install the game if not already installed."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"help "})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Displays help for the command line interface or a specific action."}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"version"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Displays the version of the GameVault client application."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"uri-query-action",children:'URI "Query" Action'}),"\n",(0,a.jsx)(n.p,{children:'The URI "query" action allows you to retrieve information from the client-side app. It is not a replacement for server-side backend interaction but serves as a means to obtain simple information.'}),"\n",(0,a.jsxs)(n.p,{children:["When sending a request via URI, an additional action called ",(0,a.jsx)(n.code,{children:"query"})," is available, which lets you get information from the client-side app. This is ",(0,a.jsx)(n.strong,{children:"not"})," a replacement for the server-side backend and is just a way to get simple information. The specific value to query is provided in the ",(0,a.jsx)(n.code,{children:"query"})," parameter, with the following options available:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"exists"}),": Check if the provided ",(0,a.jsx)(n.code,{children:"gameid"}),"-parameter exists locally or on the configured server (True/False)."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"installed"}),": Check if the provided ",(0,a.jsx)(n.code,{children:"gameid"}),"-parameter is installed (True/False)."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"downloaded"}),": Check if the provided ",(0,a.jsx)(n.code,{children:"gameid"}),"-parameter is downloaded (True/False)."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"getname"}),": Get the name of the game defined by ",(0,a.jsx)(n.code,{children:"gameid"}),"-parameter."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"getinstalldirectory"}),": Get the install directory of the game defined by ",(0,a.jsx)(n.code,{children:"gameid"}),"-parameter."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"getappversion"}),": Get the version of the application."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"getserverurl"}),": Get the URL that we're currently configured to point to."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.code,{children:"isloggedin"}),": Returns if the user is currently logged in (True/False)."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"command-line-examples",children:"Command-line Examples"}),"\n",(0,a.jsx)(n.p,{children:"Explore examples of using the GameVault client APIs via the command line:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-ps1",children:"# Launch GameVault\ngamevault.exe\n\n# Open GameVault in the background\ngamevault.exe --minimized=true\n\n# Show a specific game (ID 3)\ngamevault.exe show --gameid=3\n\n# Install a game (ID 3)\ngamevault.exe install --gameid=3\n\n# Uninstall a game (ID 3)\ngamevault.exe uninstall --gameid=3\n\n# Start a game (ID 3)\ngamevault.exe start --gameid=3\n\n# Start a game (ID 3) and bring GameVault into view\ngamevault.exe start --gameid=3 --minimized=false\n\n# Same as above without '='\ngamevault.exe start --gameid 3 --minimized false\n\n# Display help screen\ngamevault.exe help\n\n# Display help for 'start'\ngamevault.exe help start\n"})}),"\n",(0,a.jsx)(n.h2,{id:"uri-examples",children:"URI Examples"}),"\n",(0,a.jsx)(n.p,{children:"Discover examples of using the GameVault client APIs via URI:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-uri",children:"gamevault://show\ngamevault://show?minimized=true\ngamevault://install?gameid=3\ngamevault://uninstall?gameid=3\ngamevault://start?gameid=3\ngamevault://start?gameid=3&minimized=false\n"})}),"\n",(0,a.jsx)(n.h2,{id:"query-examples",children:"Query Examples"}),"\n",(0,a.jsx)(n.p,{children:"Explore examples of querying the GameVault client application through URI:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-uri",children:"gamevault://query?query=exists&gameid=3\ngamevault://query?query=installed&gameid=3\ngamevault://query?query=downloaded&gameid=3\ngamevault://query?query=getname&gameid=3\ngamevault://query?query=getinstalldirectory&gameid=3\ngamevault://query?query=getappversion\ngamevault://query?query=getserverurl\ngamevault://query?query=isloggedin\n"})}),"\n",(0,a.jsx)(n.h2,{id:"c-code-example",children:"C# Code Example"}),"\n",(0,a.jsx)(n.p,{children:"For developers working with C#, here's an example of interacting with the GameVault app through the NamedPipe:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-csharp",children:'using System;\nusing System.IO;\nusing System.IO.Pipes;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\npublic static class GameVaultInteraction\n{\n public static async Task SendPipeMessage(string message, CancellationToken cancellationToken, bool expectsResult = false, int timeout = 500)\n {\n string result = null;\n using var client = new NamedPipeClientStream("GameVault");\n StreamWriter writer = null;\n StreamReader reader = null;\n\n try\n {\n await client.ConnectAsync(timeout, cancellationToken);\n\n writer = new StreamWriter(client, Encoding.UTF8, 1024, leaveOpen: true) { AutoFlush = true };\n await writer.WriteLineAsync(message);\n\n if (expectsResult)\n {\n reader = new StreamReader(client, Encoding.UTF8, false, 1024, leaveOpen: true);\n result = await reader.ReadLineAsync();\n }\n }\n finally\n {\n SafeDispose(writer);\n SafeDispose(reader);\n SafeDispose(client);\n }\n\n return result;\n }\n\n private static void SafeDispose(IDisposable disposable)\n {\n if (disposable == null)\n return;\n\n try\n {\n disposable.Dispose();\n }\n catch (Exception) { }\n }\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},8358:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>s});var a=i(5271);const t={},l=a.createContext(t);function s(e){const n=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9404f843.436aab42.js b/assets/js/9404f843.436aab42.js new file mode 100644 index 000000000..762d05722 --- /dev/null +++ b/assets/js/9404f843.436aab42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5849],{340:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"gamevault-plus/client-apis","title":"Client APIs","description":"The GameVault Client APIs offer interfaces for external use of the GameVault client application for subscribers of GameVault+. Whether you\'re interacting via the command line, URI, or NamedPipe, you have access to various functionalities provided by the GameVault Client Application. This can be useful for third-party developers who want to integrate with the GameVault ecosystem. (e.g. Playnite Extension)","source":"@site/docs/gamevault-plus/client-apis.md","sourceDirName":"gamevault-plus","slug":"/gamevault-plus/client-apis","permalink":"/docs/gamevault-plus/client-apis","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/client-apis.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4,"title":"Client APIs"},"sidebar":"docs","previous":{"title":"Themes","permalink":"/docs/gamevault-plus/themes"},"next":{"title":"Licensing and Contributions","permalink":"/docs/license-contribute"}}');var t=i(6070),l=i(8591);const s={sidebar_position:4,title:"Client APIs"},r=void 0,d={},c=[{value:"Available APIs",id:"available-apis",level:2},{value:"CLI",id:"cli",level:3},{value:"URI",id:"uri",level:3},{value:"NamedPipe",id:"namedpipe",level:3},{value:"Usage",id:"usage",level:2},{value:"Available Actions & Parameters",id:"available-actions--parameters",level:2},{value:"URI "Query" Action",id:"uri-query-action",level:2},{value:"Command-line Examples",id:"command-line-examples",level:2},{value:"URI Examples",id:"uri-examples",level:2},{value:"Query Examples",id:"query-examples",level:2},{value:"C# Code Example",id:"c-code-example",level:2}];function o(e){const n={code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"The GameVault Client APIs offer interfaces for external use of the GameVault client application for subscribers of GameVault+. Whether you're interacting via the command line, URI, or NamedPipe, you have access to various functionalities provided by the GameVault Client Application. This can be useful for third-party developers who want to integrate with the GameVault ecosystem. (e.g. Playnite Extension)"}),"\n",(0,t.jsx)(n.p,{children:"This guide provides comprehensive information on utilizing various interfaces offered by the GameVault client application for third-party developers. Whether you're building extensions or integrating with the GameVault ecosystem, this documentation will guide you through the available APIs and their specifications."}),"\n",(0,t.jsx)(n.h2,{id:"available-apis",children:"Available APIs"}),"\n",(0,t.jsx)(n.h3,{id:"cli",children:"CLI"}),"\n",(0,t.jsx)(n.p,{children:"The Command Line Interface (CLI) provides a straightforward way to interact with the GameVault client application directly from the command line. It supports various actions and parameters for seamless integration into your workflows."}),"\n",(0,t.jsx)(n.h3,{id:"uri",children:"URI"}),"\n",(0,t.jsx)(n.p,{children:"The Uniform Resource Identifier (URI) handler allows for communication with the GameVault client application through custom URI schemes. By leveraging URI endpoints, you can trigger actions and pass parameters conveniently."}),"\n",(0,t.jsx)(n.h3,{id:"namedpipe",children:"NamedPipe"}),"\n",(0,t.jsx)(n.p,{children:"The NamedPipe interface facilitates communication between processes on the same machine. Through NamedPipe, you can send messages to and receive responses from the GameVault client application, enabling real-time interaction."}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.p,{children:"The following sections detail how to use each API provided by the GameVault client application."}),"\n",(0,t.jsx)(n.h2,{id:"available-actions--parameters",children:"Available Actions & Parameters"}),"\n",(0,t.jsx)(n.p,{children:"Explore the list of actions and parameters supported by the GameVault client APIs. (Bold parameters are required, Asterisks indicate default values )"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:" "})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Supported for direct command-line usage only."}),"\n",(0,t.jsxs)(n.li,{children:["Alias for ",(0,t.jsx)(n.code,{children:"show"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"show"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Starts and if the main application or a specific game."}),"\n",(0,t.jsxs)(n.li,{children:["Parameters:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to show."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"install"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Starts the download of a specific game defined by ",(0,t.jsx)(n.code,{children:"gameid"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Additional parameters:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to install."]})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"uninstall"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Uninstalls a specific game defined by ",(0,t.jsx)(n.code,{children:"gameid"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Additional parameters:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to uninstall."]})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"start"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Starts a specific game defined by ",(0,t.jsx)(n.code,{children:"gameid"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Additional parameters:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"gameid=[id]"}),": Target a specific game to start."]})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"minimized=[true/false*]"}),": Run the application minimized to the tray."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"autoinstall=[true/false*]"}),": Whether to automatically install the game if not already installed."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"help "})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Displays help for the command line interface or a specific action."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"version"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Displays the version of the GameVault client application."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"uri-query-action",children:'URI "Query" Action'}),"\n",(0,t.jsx)(n.p,{children:'The URI "query" action allows you to retrieve information from the client-side app. It is not a replacement for server-side backend interaction but serves as a means to obtain simple information.'}),"\n",(0,t.jsxs)(n.p,{children:["When sending a request via URI, an additional action called ",(0,t.jsx)(n.code,{children:"query"})," is available, which lets you get information from the client-side app. This is ",(0,t.jsx)(n.strong,{children:"not"})," a replacement for the server-side backend and is just a way to get simple information. The specific value to query is provided in the ",(0,t.jsx)(n.code,{children:"query"})," parameter, with the following options available:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"exists"}),": Check if the provided ",(0,t.jsx)(n.code,{children:"gameid"}),"-parameter exists locally or on the configured server (True/False)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"installed"}),": Check if the provided ",(0,t.jsx)(n.code,{children:"gameid"}),"-parameter is installed (True/False)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"downloaded"}),": Check if the provided ",(0,t.jsx)(n.code,{children:"gameid"}),"-parameter is downloaded (True/False)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"getname"}),": Get the name of the game defined by ",(0,t.jsx)(n.code,{children:"gameid"}),"-parameter."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"getinstalldirectory"}),": Get the install directory of the game defined by ",(0,t.jsx)(n.code,{children:"gameid"}),"-parameter."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"getappversion"}),": Get the version of the application."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"getserverurl"}),": Get the URL that we're currently configured to point to."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"isloggedin"}),": Returns if the user is currently logged in (True/False)."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"command-line-examples",children:"Command-line Examples"}),"\n",(0,t.jsx)(n.p,{children:"Explore examples of using the GameVault client APIs via the command line:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ps1",children:"# Launch GameVault\ngamevault.exe\n\n# Open GameVault in the background\ngamevault.exe --minimized=true\n\n# Show a specific game (ID 3)\ngamevault.exe show --gameid=3\n\n# Install a game (ID 3)\ngamevault.exe install --gameid=3\n\n# Uninstall a game (ID 3)\ngamevault.exe uninstall --gameid=3\n\n# Start a game (ID 3)\ngamevault.exe start --gameid=3\n\n# Start a game (ID 3) and bring GameVault into view\ngamevault.exe start --gameid=3 --minimized=false\n\n# Same as above without '='\ngamevault.exe start --gameid 3 --minimized false\n\n# Display help screen\ngamevault.exe help\n\n# Display help for 'start'\ngamevault.exe help start\n"})}),"\n",(0,t.jsx)(n.h2,{id:"uri-examples",children:"URI Examples"}),"\n",(0,t.jsx)(n.p,{children:"Discover examples of using the GameVault client APIs via URI:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-uri",children:"gamevault://show\ngamevault://show?minimized=true\ngamevault://install?gameid=3\ngamevault://uninstall?gameid=3\ngamevault://start?gameid=3\ngamevault://start?gameid=3&minimized=false\n"})}),"\n",(0,t.jsx)(n.h2,{id:"query-examples",children:"Query Examples"}),"\n",(0,t.jsx)(n.p,{children:"Explore examples of querying the GameVault client application through URI:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-uri",children:"gamevault://query?query=exists&gameid=3\ngamevault://query?query=installed&gameid=3\ngamevault://query?query=downloaded&gameid=3\ngamevault://query?query=getname&gameid=3\ngamevault://query?query=getinstalldirectory&gameid=3\ngamevault://query?query=getappversion\ngamevault://query?query=getserverurl\ngamevault://query?query=isloggedin\n"})}),"\n",(0,t.jsx)(n.h2,{id:"c-code-example",children:"C# Code Example"}),"\n",(0,t.jsx)(n.p,{children:"For developers working with C#, here's an example of interacting with the GameVault app through the NamedPipe:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:'using System;\nusing System.IO;\nusing System.IO.Pipes;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\npublic static class GameVaultInteraction\n{\n public static async Task SendPipeMessage(string message, CancellationToken cancellationToken, bool expectsResult = false, int timeout = 500)\n {\n string result = null;\n using var client = new NamedPipeClientStream("GameVault");\n StreamWriter writer = null;\n StreamReader reader = null;\n\n try\n {\n await client.ConnectAsync(timeout, cancellationToken);\n\n writer = new StreamWriter(client, Encoding.UTF8, 1024, leaveOpen: true) { AutoFlush = true };\n await writer.WriteLineAsync(message);\n\n if (expectsResult)\n {\n reader = new StreamReader(client, Encoding.UTF8, false, 1024, leaveOpen: true);\n result = await reader.ReadLineAsync();\n }\n }\n finally\n {\n SafeDispose(writer);\n SafeDispose(reader);\n SafeDispose(client);\n }\n\n return result;\n }\n\n private static void SafeDispose(IDisposable disposable)\n {\n if (disposable == null)\n return;\n\n try\n {\n disposable.Dispose();\n }\n catch (Exception) { }\n }\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},8591:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>r});var a=i(758);const t={},l=a.createContext(t);function s(e){const n=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9748c478.099aef4c.js b/assets/js/9748c478.099aef4c.js new file mode 100644 index 000000000..a7060ea39 --- /dev/null +++ b/assets/js/9748c478.099aef4c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3911],{8169:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>t,toc:()=>h});var t=a(7985),s=a(6070),l=a(8591);const i={title:"A New Name",authors:["alfagun74"],tags:["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},r=void 0,o={authorsImageUrls:[void 0]},h=[{value:"Summary",id:"summary",level:2},{value:"Market Analysis",id:"market-analysis",level:2},{value:"1. GameStash",id:"1-gamestash",level:3},{value:"2. GameVault",id:"2-gamevault",level:3},{value:"3. GameShelf",id:"3-gameshelf",level:3},{value:"4. Harbor",id:"4-harbor",level:3},{value:"5. GameHub",id:"5-gamehub",level:3},{value:"What's Next?",id:"whats-next",level:2},{value:"Special Thanks \u2764\ufe0f",id:"special-thanks-\ufe0f",level:2}];function d(e){const n={a:"a",br:"br",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Hey everyone,"}),"\n",(0,s.jsx)(n.p,{children:"We are thrilled to announce that the poll for choosing a new name for our app is finally over. The process of transitioning to the new name will commence very soon, and we can't wait to share the exciting updates with you."}),"\n",(0,s.jsx)(n.p,{children:"But first, let's dive into the poll results and shed some light on the important facts without further delay:"}),"\n",(0,s.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,s.jsx)(n.p,{children:"In total, 71 people participated in the poll, providing us with valuable data to draw conclusions from. Here's a summary of the key findings:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"52.1% of the community voted against using any terms related to piracy in the app. We understand and respect this choice because it would harm our business and attract the wrong users, as we have no affiliation with piracy."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"42.3% of the community voted to recommend the app under a different name but not with its current name. This feedback motivated us to rename the app, confirming that it wasn't just a few critics on Reddit. We want to expand our community to include the families, friends, and colleagues of these people. So please, help us spread the word about the name change!"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"36.6% of you said you wouldn't contribute to our app at all solely because of its name, even if you had the opportunity. We depend on these contributions to grow and improve, so we now encourage you to participate!"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Without further ado, here are the top 5 names that emerged as winners in the poll:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"GameStash (38%)"}),"\n",(0,s.jsx)(n.li,{children:"GameVault (35.2%)"}),"\n",(0,s.jsx)(n.li,{children:"GameShelf (31%)"}),"\n",(0,s.jsx)(n.li,{children:"Harbor (29.6%)"}),"\n",(0,s.jsx)(n.li,{children:"GameHub (28.2%)"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"As mentioned earlier, we conducted the poll without conducting market analysis beforehand. However, we recognized the significance of making an informed decision for the benefit of the community. Consequently, we proceeded to analyze each name after the poll to ensure the chosen name resonates with our vision."}),"\n",(0,s.jsx)(n.p,{children:"Allow us to share the summarized results of our market analysis:"}),"\n",(0,s.jsx)(n.h2,{id:"market-analysis",children:"Market Analysis"}),"\n",(0,s.jsx)(n.h3,{id:"1-gamestash",children:"1. GameStash"}),"\n",(0,s.jsxs)(n.p,{children:["Google Search Results: ~33,600",(0,s.jsx)(n.br,{}),"\n","Possible Domains: gamestash.de"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["There's already an app called ",(0,s.jsx)(n.a,{href:"https://gamestash.app/",children:"GameStash"})," that offers similar features to ours."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"2-gamevault",children:"2. GameVault"}),"\n",(0,s.jsxs)(n.p,{children:["Google Search Results: ~800,000",(0,s.jsx)(n.br,{}),"\n","Possible Domains: gamevau.lt, game-vault.de"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['The term "GameVault" is associated with a popular online casino/gambling application called ',(0,s.jsx)(n.a,{href:"https://gamevault999.com/",children:"GameVault999"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"3-gameshelf",children:"3. GameShelf"}),"\n",(0,s.jsxs)(n.p,{children:["Google Search Results: ~560,000",(0,s.jsx)(n.br,{}),"\n","Possible Domains: gameshelf.de"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:['The name "Gameshelf" is already used by two existing applications. One is a ',(0,s.jsx)(n.a,{href:"https://gameshelf.io/",children:"Board-Game-Collection Viewer"}),", and the other is a ",(0,s.jsx)(n.a,{href:"https://gameshelf.dev",children:"Gaming Backlog"})," app."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"4-harbor",children:"4. Harbor"}),"\n",(0,s.jsxs)(n.p,{children:["Google Search Results: ~393,000,000",(0,s.jsx)(n.br,{}),"\n","Possible Domains: harborapp.de"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'"Harbor" is a very common word, making it challenging to find a suitable domain that aligns with our brand identity.'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Additionally, there's a well-known app called ",(0,s.jsx)(n.a,{href:"https://goharbor.io",children:"Harbor on the Market"})," related to Docker/Kubernetes."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"5-gamehub",children:"5. GameHub"}),"\n",(0,s.jsx)(n.p,{children:"Google Search Results: ~5,690,000\nPossible Domains: gamehubapp.de"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/tkashkin/GameHub",children:"GameHub"})," is a popular game library manager"]}),"\n",(0,s.jsx)(n.li,{children:"it also sounds like a popular adult site \ud83d\ude01"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,s.jsx)(n.p,{children:"We understand your eagerness for a new name, and we are equally committed to distancing ourselves from the old one. Taking into account all the suggested names and feedback, we engaged in extensive internal brainstorming, free from outside influences."}),"\n",(0,s.jsx)(n.p,{children:"We sought a name that is descriptive, intuitive, and effectively conveys the purpose of our app. Additionally, we aimed for a name that is easily memorable and emphasizes the ownership and control of a self-hosted server, security, and exclusivity."}),"\n",(0,s.jsxs)(n.p,{children:["Introducing our new name: ",(0,s.jsx)(n.strong,{children:"GameVault"}),(0,s.jsx)(n.br,{}),"\n","Available soon under this domain: ",(0,s.jsx)(n.a,{href:"https://gamevau.lt",children:"gamevau.lt"})]}),"\n",(0,s.jsx)(n.p,{children:"We have already secured the domain and registered the name wherever possible. The transition process will commence shortly. We are eager to hear your thoughts on the new name. Do you like it?"}),"\n",(0,s.jsx)(n.h2,{id:"special-thanks-\ufe0f",children:"Special Thanks \u2764\ufe0f"}),"\n",(0,s.jsx)(n.p,{children:"Well, as you all know, this was quite a journey to get here, and we wanted to give our special thanks to:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Everybody who gave this project's idea a chance, even if the name was kind of weird."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Everybody who made suggestions on our ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," server and participated in the discussions."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Everybody who voted."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["A special shoutout to @KairuByte on ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," for coming up with the name GameVault."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["We would also like to extend our gratitude to ",(0,s.jsx)(n.a,{href:"https://selfhosted.show/101?t=2731",children:"The Selfhosted Podcast"})," for discussing our app. (Brent, we are excited to hear your thoughts on the new name from a marketing standpoint \ud83d\ude1c)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Last but not least, thank you to ",(0,s.jsx)(n.a,{href:"https://selfh.st/newsletter/2023-07-07/",children:"The Self-Hosted Newsletter"})," for mentioning our release."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Thank you all for your continued support!"}),"\n",(0,s.jsxs)(n.p,{children:["We will keep you updated as the transition unfolds. In the meantime, head over to our ",(0,s.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," channel to celebrate and share your thoughts on the new name."]}),"\n",(0,s.jsx)(n.p,{children:"Stay tuned!"})]})}function u(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8591:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>r});var t=a(758);const s={},l=t.createContext(s);function i(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(l.Provider,{value:n},e.children)}},7985:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/15/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-15.md","source":"@site/blog/2023-07-15.md","title":"A New Name","description":"Hey everyone,","date":"2023-07-15T00:00:00.000Z","tags":[{"inline":true,"label":"poll results","permalink":"/blog/tags/poll-results"},{"inline":true,"label":"renaming app","permalink":"/blog/tags/renaming-app"},{"inline":true,"label":"community feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"GameStash","permalink":"/blog/tags/game-stash"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameShelf","permalink":"/blog/tags/game-shelf"},{"inline":true,"label":"Harbor","permalink":"/blog/tags/harbor"},{"inline":true,"label":"GameHub","permalink":"/blog/tags/game-hub"},{"inline":true,"label":"market analysis","permalink":"/blog/tags/market-analysis"},{"inline":true,"label":"new name announcement","permalink":"/blog/tags/new-name-announcement"},{"inline":true,"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain"},{"inline":true,"label":"special thanks","permalink":"/blog/tags/special-thanks"},{"inline":true,"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast"},{"inline":true,"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter"},{"inline":true,"label":"transition process","permalink":"/blog/tags/transition-process"}],"readingTime":3.85,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A New Name","authors":["alfagun74"],"tags":["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},"unlisted":false,"prevItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"},"nextItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"}}')}}]); \ No newline at end of file diff --git a/assets/js/9748c478.ab7b920b.js b/assets/js/9748c478.ab7b920b.js deleted file mode 100644 index eaf573759..000000000 --- a/assets/js/9748c478.ab7b920b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7807],{3326:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>i,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>h});var t=a(2676),s=a(8358);const l={title:"A New Name",authors:["alfagun74"],tags:["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},i=void 0,o={permalink:"/blog/2023/07/15/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-15.md",source:"@site/blog/2023-07-15.md",title:"A New Name",description:"Hey everyone,",date:"2023-07-15T00:00:00.000Z",tags:[{inline:!0,label:"poll results",permalink:"/blog/tags/poll-results"},{inline:!0,label:"renaming app",permalink:"/blog/tags/renaming-app"},{inline:!0,label:"community feedback",permalink:"/blog/tags/community-feedback"},{inline:!0,label:"GameStash",permalink:"/blog/tags/game-stash"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"GameShelf",permalink:"/blog/tags/game-shelf"},{inline:!0,label:"Harbor",permalink:"/blog/tags/harbor"},{inline:!0,label:"GameHub",permalink:"/blog/tags/game-hub"},{inline:!0,label:"market analysis",permalink:"/blog/tags/market-analysis"},{inline:!0,label:"new name announcement",permalink:"/blog/tags/new-name-announcement"},{inline:!0,label:"GameVault domain",permalink:"/blog/tags/game-vault-domain"},{inline:!0,label:"special thanks",permalink:"/blog/tags/special-thanks"},{inline:!0,label:"Selfhosted Podcast",permalink:"/blog/tags/selfhosted-podcast"},{inline:!0,label:"Self-Hosted Newsletter",permalink:"/blog/tags/self-hosted-newsletter"},{inline:!0,label:"transition process",permalink:"/blog/tags/transition-process"}],readingTime:3.85,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"A New Name",authors:["alfagun74"],tags:["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},unlisted:!1,prevItem:{title:"Quick Migration Update and new Logo",permalink:"/blog/2023/07/19/"},nextItem:{title:"A Closer Look at GameVaults 'Source-Available' Nature",permalink:"/blog/2023/07/13/"}},r={authorsImageUrls:[void 0]},h=[{value:"Summary",id:"summary",level:2},{value:"Market Analysis",id:"market-analysis",level:2},{value:"1. GameStash",id:"1-gamestash",level:3},{value:"2. GameVault",id:"2-gamevault",level:3},{value:"3. GameShelf",id:"3-gameshelf",level:3},{value:"4. Harbor",id:"4-harbor",level:3},{value:"5. GameHub",id:"5-gamehub",level:3},{value:"What's Next?",id:"whats-next",level:2},{value:"Special Thanks \u2764\ufe0f",id:"special-thanks-\ufe0f",level:2}];function d(e){const n={a:"a",br:"br",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Hey everyone,"}),"\n",(0,t.jsx)(n.p,{children:"We are thrilled to announce that the poll for choosing a new name for our app is finally over. The process of transitioning to the new name will commence very soon, and we can't wait to share the exciting updates with you."}),"\n",(0,t.jsx)(n.p,{children:"But first, let's dive into the poll results and shed some light on the important facts without further delay:"}),"\n",(0,t.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,t.jsx)(n.p,{children:"In total, 71 people participated in the poll, providing us with valuable data to draw conclusions from. Here's a summary of the key findings:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"52.1% of the community voted against using any terms related to piracy in the app. We understand and respect this choice because it would harm our business and attract the wrong users, as we have no affiliation with piracy."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"42.3% of the community voted to recommend the app under a different name but not with its current name. This feedback motivated us to rename the app, confirming that it wasn't just a few critics on Reddit. We want to expand our community to include the families, friends, and colleagues of these people. So please, help us spread the word about the name change!"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"36.6% of you said you wouldn't contribute to our app at all solely because of its name, even if you had the opportunity. We depend on these contributions to grow and improve, so we now encourage you to participate!"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Without further ado, here are the top 5 names that emerged as winners in the poll:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"GameStash (38%)"}),"\n",(0,t.jsx)(n.li,{children:"GameVault (35.2%)"}),"\n",(0,t.jsx)(n.li,{children:"GameShelf (31%)"}),"\n",(0,t.jsx)(n.li,{children:"Harbor (29.6%)"}),"\n",(0,t.jsx)(n.li,{children:"GameHub (28.2%)"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"As mentioned earlier, we conducted the poll without conducting market analysis beforehand. However, we recognized the significance of making an informed decision for the benefit of the community. Consequently, we proceeded to analyze each name after the poll to ensure the chosen name resonates with our vision."}),"\n",(0,t.jsx)(n.p,{children:"Allow us to share the summarized results of our market analysis:"}),"\n",(0,t.jsx)(n.h2,{id:"market-analysis",children:"Market Analysis"}),"\n",(0,t.jsx)(n.h3,{id:"1-gamestash",children:"1. GameStash"}),"\n",(0,t.jsxs)(n.p,{children:["Google Search Results: ~33,600",(0,t.jsx)(n.br,{}),"\n","Possible Domains: gamestash.de"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["There's already an app called ",(0,t.jsx)(n.a,{href:"https://gamestash.app/",children:"GameStash"})," that offers similar features to ours."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"2-gamevault",children:"2. GameVault"}),"\n",(0,t.jsxs)(n.p,{children:["Google Search Results: ~800,000",(0,t.jsx)(n.br,{}),"\n","Possible Domains: gamevau.lt, game-vault.de"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:['The term "GameVault" is associated with a popular online casino/gambling application called ',(0,t.jsx)(n.a,{href:"https://gamevault999.com/",children:"GameVault999"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"3-gameshelf",children:"3. GameShelf"}),"\n",(0,t.jsxs)(n.p,{children:["Google Search Results: ~560,000",(0,t.jsx)(n.br,{}),"\n","Possible Domains: gameshelf.de"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:['The name "Gameshelf" is already used by two existing applications. One is a ',(0,t.jsx)(n.a,{href:"https://gameshelf.io/",children:"Board-Game-Collection Viewer"}),", and the other is a ",(0,t.jsx)(n.a,{href:"https://gameshelf.dev",children:"Gaming Backlog"})," app."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"4-harbor",children:"4. Harbor"}),"\n",(0,t.jsxs)(n.p,{children:["Google Search Results: ~393,000,000",(0,t.jsx)(n.br,{}),"\n","Possible Domains: harborapp.de"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:'"Harbor" is a very common word, making it challenging to find a suitable domain that aligns with our brand identity.'}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Additionally, there's a well-known app called ",(0,t.jsx)(n.a,{href:"https://goharbor.io",children:"Harbor on the Market"})," related to Docker/Kubernetes."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"5-gamehub",children:"5. GameHub"}),"\n",(0,t.jsx)(n.p,{children:"Google Search Results: ~5,690,000\nPossible Domains: gamehubapp.de"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://github.com/tkashkin/GameHub",children:"GameHub"})," is a popular game library manager"]}),"\n",(0,t.jsx)(n.li,{children:"it also sounds like a popular adult site \ud83d\ude01"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,t.jsx)(n.p,{children:"We understand your eagerness for a new name, and we are equally committed to distancing ourselves from the old one. Taking into account all the suggested names and feedback, we engaged in extensive internal brainstorming, free from outside influences."}),"\n",(0,t.jsx)(n.p,{children:"We sought a name that is descriptive, intuitive, and effectively conveys the purpose of our app. Additionally, we aimed for a name that is easily memorable and emphasizes the ownership and control of a self-hosted server, security, and exclusivity."}),"\n",(0,t.jsxs)(n.p,{children:["Introducing our new name: ",(0,t.jsx)(n.strong,{children:"GameVault"}),(0,t.jsx)(n.br,{}),"\n","Available soon under this domain: ",(0,t.jsx)(n.a,{href:"https://gamevau.lt",children:"gamevau.lt"})]}),"\n",(0,t.jsx)(n.p,{children:"We have already secured the domain and registered the name wherever possible. The transition process will commence shortly. We are eager to hear your thoughts on the new name. Do you like it?"}),"\n",(0,t.jsx)(n.h2,{id:"special-thanks-\ufe0f",children:"Special Thanks \u2764\ufe0f"}),"\n",(0,t.jsx)(n.p,{children:"Well, as you all know, this was quite a journey to get here, and we wanted to give our special thanks to:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Everybody who gave this project's idea a chance, even if the name was kind of weird."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Everybody who made suggestions on our ",(0,t.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," server and participated in the discussions."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Everybody who voted."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["A special shoutout to @KairuByte on ",(0,t.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," for coming up with the name GameVault."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We would also like to extend our gratitude to ",(0,t.jsx)(n.a,{href:"https://selfhosted.show/101?t=2731",children:"The Selfhosted Podcast"})," for discussing our app. (Brent, we are excited to hear your thoughts on the new name from a marketing standpoint \ud83d\ude1c)"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Last but not least, thank you to ",(0,t.jsx)(n.a,{href:"https://selfh.st/newsletter/2023-07-07/",children:"The Self-Hosted Newsletter"})," for mentioning our release."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Thank you all for your continued support!"}),"\n",(0,t.jsxs)(n.p,{children:["We will keep you updated as the transition unfolds. In the meantime, head over to our ",(0,t.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," channel to celebrate and share your thoughts on the new name."]}),"\n",(0,t.jsx)(n.p,{children:"Stay tuned!"})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8358:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>i});var t=a(5271);const s={},l=t.createContext(s);function i(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/979ccdb6.8cea7923.js b/assets/js/979ccdb6.7ccff8b7.js similarity index 83% rename from assets/js/979ccdb6.8cea7923.js rename to assets/js/979ccdb6.7ccff8b7.js index 3828f41ae..ea0f2d82e 100644 --- a/assets/js/979ccdb6.8cea7923.js +++ b/assets/js/979ccdb6.7ccff8b7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9264],{4668:a=>{a.exports=JSON.parse('{"tag":{"label":"racist","permalink":"/blog/tags/racist","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/racist","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2082],{4846:a=>{a.exports=JSON.parse('{"tag":{"label":"racist","permalink":"/blog/tags/racist","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/racist","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/99d3d5ac.1aaa4761.js b/assets/js/99d3d5ac.700a7a58.js similarity index 85% rename from assets/js/99d3d5ac.1aaa4761.js rename to assets/js/99d3d5ac.700a7a58.js index b62087ab9..ed3e38531 100644 --- a/assets/js/99d3d5ac.1aaa4761.js +++ b/assets/js/99d3d5ac.700a7a58.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5150],{9782:e=>{e.exports=JSON.parse('{"tag":{"label":"Game Development","permalink":"/blog/tags/game-development","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9931],{5845:e=>{e.exports=JSON.parse('{"tag":{"label":"Game Development","permalink":"/blog/tags/game-development","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/99f2b7e6.acd277ff.js b/assets/js/99f2b7e6.a77edf89.js similarity index 84% rename from assets/js/99f2b7e6.acd277ff.js rename to assets/js/99f2b7e6.a77edf89.js index 106daea5a..3191b9ea8 100644 --- a/assets/js/99f2b7e6.acd277ff.js +++ b/assets/js/99f2b7e6.a77edf89.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7546],{8222:t=>{t.exports=JSON.parse('{"tag":{"label":"twitch.tv","permalink":"/blog/tags/twitch-tv","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/twitch-tv","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4309],{5318:t=>{t.exports=JSON.parse('{"tag":{"label":"twitch.tv","permalink":"/blog/tags/twitch-tv","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/twitch-tv","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9b1663d8.b5d4c1d6.js b/assets/js/9b1663d8.7486e176.js similarity index 83% rename from assets/js/9b1663d8.b5d4c1d6.js rename to assets/js/9b1663d8.7486e176.js index 18b7e8bef..208cae999 100644 --- a/assets/js/9b1663d8.b5d4c1d6.js +++ b/assets/js/9b1663d8.7486e176.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6497],{2022:a=>{a.exports=JSON.parse('{"tag":{"label":"gaming","permalink":"/blog/tags/gaming","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8446],{8819:a=>{a.exports=JSON.parse('{"tag":{"label":"gaming","permalink":"/blog/tags/gaming","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9b95b357.29f7c58b.js b/assets/js/9b95b357.ed73422d.js similarity index 84% rename from assets/js/9b95b357.29f7c58b.js rename to assets/js/9b95b357.ed73422d.js index de12bcdab..98ca7e73d 100644 --- a/assets/js/9b95b357.29f7c58b.js +++ b/assets/js/9b95b357.ed73422d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2942],{4133:a=>{a.exports=JSON.parse('{"tag":{"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-servers","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8069],{8642:a=>{a.exports=JSON.parse('{"tag":{"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-servers","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9d5a95a9.5e01b5f3.js b/assets/js/9d5a95a9.102a19d8.js similarity index 83% rename from assets/js/9d5a95a9.5e01b5f3.js rename to assets/js/9d5a95a9.102a19d8.js index 5c9f2beae..d4e8eaba8 100644 --- a/assets/js/9d5a95a9.5e01b5f3.js +++ b/assets/js/9d5a95a9.102a19d8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8023],{1272:a=>{a.exports=JSON.parse('{"tag":{"label":"IGDB","permalink":"/blog/tags/igdb","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/igdb","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7782],{8324:a=>{a.exports=JSON.parse('{"tag":{"label":"IGDB","permalink":"/blog/tags/igdb","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/igdb","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9d86e7fa.2f9f9808.js b/assets/js/9d86e7fa.ceef2bf7.js similarity index 84% rename from assets/js/9d86e7fa.2f9f9808.js rename to assets/js/9d86e7fa.ceef2bf7.js index 58e7fa5c5..18aab4edc 100644 --- a/assets/js/9d86e7fa.2f9f9808.js +++ b/assets/js/9d86e7fa.ceef2bf7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7508],{1629:a=>{a.exports=JSON.parse('{"tag":{"label":"announcement","permalink":"/blog/tags/announcement","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/announcement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4129],{1136:a=>{a.exports=JSON.parse('{"tag":{"label":"announcement","permalink":"/blog/tags/announcement","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/announcement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9d9f8394.562ecabc.js b/assets/js/9d9f8394.562ecabc.js deleted file mode 100644 index 6dfc43ae5..000000000 --- a/assets/js/9d9f8394.562ecabc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9360],{5465:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=r(2676),i=r(8358);const o={sidebar_position:99},t="Troubleshooting",a={id:"troubleshooting",title:"Troubleshooting",description:"Below, we will gradually list some common issues and corresponding solutions to help you maximize the potential of your app. If you can't find a solution to your problem here, feel free to open a ticket on our Github board or seek assistance via Discord. Alternatively, you may also directly email our company address if the issue is confidential.",source:"@site/docs/troubleshooting.md",sourceDirName:".",slug:"/troubleshooting",permalink:"/docs/troubleshooting",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/troubleshooting.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:99,frontMatter:{sidebar_position:99},sidebar:"docs",previous:{title:"Licensing and Contributions",permalink:"/docs/license-contribute"}},l={},d=[{value:"All-Rounder Solutions that Fix Most Problems",id:"all-rounder-solutions-that-fix-most-problems",level:2},{value:"Common Problems and Solutions",id:"common-problems-and-solutions",level:2},{value:"Incorrect Game Mapping",id:"incorrect-game-mapping",level:3},{value:"Server fails to save media / create SQLITE Database / index games / throws a Permissions Denied / No Permission / EACCES error",id:"server-fails-to-save-media--create-sqlite-database--index-games--throws-a-permissions-denied--no-permission--eacces-error",level:3},{value:"Unable to Connect to Server / 500 Internal Server Error",id:"unable-to-connect-to-server--500-internal-server-error",level:3},{value:"Initial Admin User is not working",id:"initial-admin-user-is-not-working",level:3},{value:"Games Not Appearing in the Installations / Servers List",id:"games-not-appearing-in-the-installations--servers-list",level:3},{value:"Missing Box Arts",id:"missing-box-arts",level:3},{value:"Lack of Metadata in Games",id:"lack-of-metadata-in-games",level:3},{value:"Lost my Admin Role",id:"lost-my-admin-role",level:3},{value:"Forgot my Admin Password",id:"forgot-my-admin-password",level:3},{value:"Game Downloads are slow",id:"game-downloads-are-slow",level:3}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"troubleshooting",children:"Troubleshooting"})}),"\n",(0,n.jsxs)(s.p,{children:["Below, we will gradually list some common issues and corresponding solutions to help you maximize the potential of your app. If you can't find a solution to your problem here, feel free to open a ticket on our Github board or seek assistance via ",(0,n.jsx)(s.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),". Alternatively, you may also directly ",(0,n.jsx)(s.a,{href:"mailto:contact@phalco.de",children:"email our company address"})," if the issue is confidential."]}),"\n",(0,n.jsx)(s.admonition,{title:"How to report an issue",type:"tip",children:(0,n.jsxs)(s.p,{children:["Always provide as much information as possible so that we can reproduce the problem, and ",(0,n.jsx)(s.strong,{children:"always"})," attach a full (from the start of the server to when the problem occurs) log file with the ",(0,n.jsx)(s.code,{children:"SERVER_LOG_LEVEL"})," env-var set to ",(0,n.jsx)(s.code,{children:"debug"}),". You ",(0,n.jsx)(s.strong,{children:"must not"})," shorten log files. It just makes it harder for us to understand what went wrong. We know they get big, but we know how to read them."]})}),"\n",(0,n.jsx)(s.h2,{id:"all-rounder-solutions-that-fix-most-problems",children:"All-Rounder Solutions that Fix Most Problems"}),"\n",(0,n.jsx)(s.p,{children:"I can't mention these in every single Section below, so before you try to solve anything, try these:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Check if the server is running healthy and is reachable from your client."}),"\n",(0,n.jsx)(s.li,{children:"Restart GameVault Client and Server."}),"\n",(0,n.jsxs)(s.li,{children:["Examine Client and Server Logs for error details. (Set ",(0,n.jsx)(s.code,{children:"SERVER_LOG_LEVEL"})," to ",(0,n.jsx)(s.code,{children:"debug"}),")"]}),"\n",(0,n.jsxs)(s.li,{children:["Check ",(0,n.jsx)(s.a,{href:"/docs/server-docs/configuration",children:"Server for any issues with Configuration"}),"."]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"common-problems-and-solutions",children:"Common Problems and Solutions"}),"\n",(0,n.jsx)(s.h3,{id:"incorrect-game-mapping",children:"Incorrect Game Mapping"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Refer to ",(0,n.jsx)(s.a,{href:"/docs/client-docs/how-to-use#modifying-games",children:"this"})," for instructions on how to remap your games."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"server-fails-to-save-media--create-sqlite-database--index-games--throws-a-permissions-denied--no-permission--eacces-error",children:"Server fails to save media / create SQLITE Database / index games / throws a Permissions Denied / No Permission / EACCES error"}),"\n",(0,n.jsx)(s.p,{children:"This is most probably a permissions issue due to the fact that gamevault runs as a non-root user (1000:1000) by default for security purposes."}),"\n",(0,n.jsxs)(s.p,{children:["Either make sure this user has permissions to read/write to the folders you map in as volumes, or run GameVault with a user that has the permissions to do so. You can do this by using the ",(0,n.jsx)(s.code,{children:"PUID"})," & ",(0,n.jsx)(s.code,{children:"PGID"})," environment variables."]}),"\n",(0,n.jsx)(s.h3,{id:"unable-to-connect-to-server--500-internal-server-error",children:"Unable to Connect to Server / 500 Internal Server Error"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Ensure that you use the correct protocol (http or https) in the connection string, particularly if your server doesn't support SSL."}),"\n",(0,n.jsxs)(s.li,{children:["If you have disabled authentication in your server configuration, make sure to include the authentication header for user-specific requests. ",(0,n.jsx)(s.a,{href:"/docs/server-docs/configuration",children:"See here"})," for more information."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"initial-admin-user-is-not-working",children:"Initial Admin User is not working"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"You need to register the first user. It is automatically activated and granted admin permissions."}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"games-not-appearing-in-the-installations--servers-list",children:"Games Not Appearing in the Installations / Servers List"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/server-docs/adding-games",children:"Add Games to your server"})}),"\n",(0,n.jsx)(s.li,{children:"Clear the Searchbox"}),"\n",(0,n.jsx)(s.li,{children:"Clear all active Filters"}),"\n",(0,n.jsx)(s.li,{children:"Press F5 to trigger a new search"}),"\n",(0,n.jsxs)(s.li,{children:["For installations, verify your correct root folder is set ",(0,n.jsx)(s.a,{href:"/docs/client-docs/gui#data",children:"in the settings"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Verify your server's game id does not differ from the one in your installation folder (The game's server id can be found in the lower left corner of ",(0,n.jsx)(s.a,{href:"/docs/client-docs/gui#game-settings",children:"the game's settings"}),")."]}),"\n",(0,n.jsxs)(s.li,{children:["Verify ",(0,n.jsx)(s.a,{href:"/docs/server-docs/structure",children:"your file names are correct"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Check the Filesystem Permissions. See ",(0,n.jsx)(s.a,{href:"#server-fails-to-save-media--create-sqlite-database--index-games--throws-a-permissions-denied--no-permission--eacces-error",children:"here"})]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"missing-box-arts",children:"Missing Box Arts"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/docs/server-docs/metadata-enrichment/metadata",children:"Set up a Metadata Provider"})," that provides box art for your games."]}),"\n",(0,n.jsxs)(s.li,{children:["Clear media caches ",(0,n.jsx)(s.a,{href:"/docs/client-docs/gui#data",children:"in the settings."})]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"lack-of-metadata-in-games",children:"Lack of Metadata in Games"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/docs/server-docs/metadata-enrichment/metadata",children:"Set up a Metadata Provider"})," that provides metadata for your games."]}),"\n",(0,n.jsxs)(s.li,{children:["Verify if ",(0,n.jsx)(s.a,{href:"/docs/server-docs/configuration",children:"your Metadata Provider is disabled in your server configuration"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Verify if ",(0,n.jsx)(s.a,{href:"/docs/server-docs/structure",children:"your file names are correct"})]}),"\n",(0,n.jsxs)(s.li,{children:["Verify if you accidently marked your game as ",(0,n.jsx)(s.code,{children:"(NC)"})," (No Cache Flag)"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"lost-my-admin-role",children:"Lost my Admin Role"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Refer to ",(0,n.jsx)(s.a,{href:"./server-docs/user-management#admin-role-recovery",children:"this"})," for instructions on how to regain admin privileges for your user."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"forgot-my-admin-password",children:"Forgot my Admin Password"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Refer to ",(0,n.jsx)(s.a,{href:"./server-docs/user-management#admin-password-recovery",children:"this"})," for instructions on how to reset the password of your admin user."]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"game-downloads-are-slow",children:"Game Downloads are slow"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Make sure the Clients Bandwidth Speed Limit is unset under ",(0,n.jsx)(s.code,{children:"Settings -> Application"})]}),"\n",(0,n.jsxs)(s.li,{children:["Make sure the Servers Bandwidth Speed Limit is unset (",(0,n.jsx)(s.code,{children:"SERVER_MAX_DOWNLOAD_BANDWIDTH_IN_KBPS"})," environment variable unset or 0)"]}),"\n",(0,n.jsx)(s.li,{children:"Restart your Client and Server"}),"\n",(0,n.jsx)(s.li,{children:"If your server is in your LAN, make sure you don't mistakenly access it from WAN"}),"\n",(0,n.jsx)(s.li,{children:"Check your middle-mans: Proxies, VPNs and older Network Hardware could all affect the download speeds."}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8358:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>t});var n=r(5271);const i={},o=n.createContext(i);function t(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9d9f8394.fa0ce498.js b/assets/js/9d9f8394.fa0ce498.js new file mode 100644 index 000000000..b7737b629 --- /dev/null +++ b/assets/js/9d9f8394.fa0ce498.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9013],{3303:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"troubleshooting","title":"Troubleshooting","description":"Below, we will gradually list some common issues and corresponding solutions to help you maximize the potential of your app. If you can\'t find a solution to your problem here, feel free to open a ticket on our Github board or seek assistance via Discord. Alternatively, you may also directly email our company address if the issue is confidential.","source":"@site/docs/troubleshooting.md","sourceDirName":".","slug":"/troubleshooting","permalink":"/docs/troubleshooting","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/troubleshooting.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":99,"frontMatter":{"sidebar_position":99},"sidebar":"docs","previous":{"title":"Licensing and Contributions","permalink":"/docs/license-contribute"}}');var i=r(6070),o=r(8591);const t={sidebar_position:99},a="Troubleshooting",l={},d=[{value:"All-Rounder Solutions that Fix Most Problems",id:"all-rounder-solutions-that-fix-most-problems",level:2},{value:"Common Problems and Solutions",id:"common-problems-and-solutions",level:2},{value:"Incorrect Game Mapping",id:"incorrect-game-mapping",level:3},{value:"Server fails to save media / create SQLITE Database / index games / throws a Permissions Denied / No Permission / EACCES error",id:"server-fails-to-save-media--create-sqlite-database--index-games--throws-a-permissions-denied--no-permission--eacces-error",level:3},{value:"Unable to Connect to Server / 500 Internal Server Error",id:"unable-to-connect-to-server--500-internal-server-error",level:3},{value:"Initial Admin User is not working",id:"initial-admin-user-is-not-working",level:3},{value:"Games Not Appearing in the Installations / Servers List",id:"games-not-appearing-in-the-installations--servers-list",level:3},{value:"Missing Box Arts",id:"missing-box-arts",level:3},{value:"Lack of Metadata in Games",id:"lack-of-metadata-in-games",level:3},{value:"Lost my Admin Role",id:"lost-my-admin-role",level:3},{value:"Forgot my Admin Password",id:"forgot-my-admin-password",level:3},{value:"Game Downloads are slow",id:"game-downloads-are-slow",level:3}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"troubleshooting",children:"Troubleshooting"})}),"\n",(0,i.jsxs)(s.p,{children:["Below, we will gradually list some common issues and corresponding solutions to help you maximize the potential of your app. If you can't find a solution to your problem here, feel free to open a ticket on our Github board or seek assistance via ",(0,i.jsx)(s.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),". Alternatively, you may also directly ",(0,i.jsx)(s.a,{href:"mailto:contact@phalco.de",children:"email our company address"})," if the issue is confidential."]}),"\n",(0,i.jsx)(s.admonition,{title:"How to report an issue",type:"tip",children:(0,i.jsxs)(s.p,{children:["Always provide as much information as possible so that we can reproduce the problem, and ",(0,i.jsx)(s.strong,{children:"always"})," attach a full (from the start of the server to when the problem occurs) log file with the ",(0,i.jsx)(s.code,{children:"SERVER_LOG_LEVEL"})," env-var set to ",(0,i.jsx)(s.code,{children:"debug"}),". You ",(0,i.jsx)(s.strong,{children:"must not"})," shorten log files. It just makes it harder for us to understand what went wrong. We know they get big, but we know how to read them."]})}),"\n",(0,i.jsx)(s.h2,{id:"all-rounder-solutions-that-fix-most-problems",children:"All-Rounder Solutions that Fix Most Problems"}),"\n",(0,i.jsx)(s.p,{children:"I can't mention these in every single Section below, so before you try to solve anything, try these:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Check if the server is running healthy and is reachable from your client."}),"\n",(0,i.jsx)(s.li,{children:"Restart GameVault Client and Server."}),"\n",(0,i.jsxs)(s.li,{children:["Examine Client and Server Logs for error details. (Set ",(0,i.jsx)(s.code,{children:"SERVER_LOG_LEVEL"})," to ",(0,i.jsx)(s.code,{children:"debug"}),")"]}),"\n",(0,i.jsxs)(s.li,{children:["Check ",(0,i.jsx)(s.a,{href:"/docs/server-docs/configuration",children:"Server for any issues with Configuration"}),"."]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"common-problems-and-solutions",children:"Common Problems and Solutions"}),"\n",(0,i.jsx)(s.h3,{id:"incorrect-game-mapping",children:"Incorrect Game Mapping"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Refer to ",(0,i.jsx)(s.a,{href:"/docs/client-docs/how-to-use#modifying-games",children:"this"})," for instructions on how to remap your games."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"server-fails-to-save-media--create-sqlite-database--index-games--throws-a-permissions-denied--no-permission--eacces-error",children:"Server fails to save media / create SQLITE Database / index games / throws a Permissions Denied / No Permission / EACCES error"}),"\n",(0,i.jsx)(s.p,{children:"This is most probably a permissions issue due to the fact that gamevault runs as a non-root user (1000:1000) by default for security purposes."}),"\n",(0,i.jsxs)(s.p,{children:["Either make sure this user has permissions to read/write to the folders you map in as volumes, or run GameVault with a user that has the permissions to do so. You can do this by using the ",(0,i.jsx)(s.code,{children:"PUID"})," & ",(0,i.jsx)(s.code,{children:"PGID"})," environment variables."]}),"\n",(0,i.jsx)(s.h3,{id:"unable-to-connect-to-server--500-internal-server-error",children:"Unable to Connect to Server / 500 Internal Server Error"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Ensure that you use the correct protocol (http or https) in the connection string, particularly if your server doesn't support SSL."}),"\n",(0,i.jsxs)(s.li,{children:["If you have disabled authentication in your server configuration, make sure to include the authentication header for user-specific requests. ",(0,i.jsx)(s.a,{href:"/docs/server-docs/configuration",children:"See here"})," for more information."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"initial-admin-user-is-not-working",children:"Initial Admin User is not working"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"You need to register the first user. It is automatically activated and granted admin permissions."}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"games-not-appearing-in-the-installations--servers-list",children:"Games Not Appearing in the Installations / Servers List"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/server-docs/adding-games",children:"Add Games to your server"})}),"\n",(0,i.jsx)(s.li,{children:"Clear the Searchbox"}),"\n",(0,i.jsx)(s.li,{children:"Clear all active Filters"}),"\n",(0,i.jsx)(s.li,{children:"Press F5 to trigger a new search"}),"\n",(0,i.jsxs)(s.li,{children:["For installations, verify your correct root folder is set ",(0,i.jsx)(s.a,{href:"/docs/client-docs/gui#data",children:"in the settings"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:["Verify your server's game id does not differ from the one in your installation folder (The game's server id can be found in the lower left corner of ",(0,i.jsx)(s.a,{href:"/docs/client-docs/gui#game-settings",children:"the game's settings"}),")."]}),"\n",(0,i.jsxs)(s.li,{children:["Verify ",(0,i.jsx)(s.a,{href:"/docs/server-docs/structure",children:"your file names are correct"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:["Check the Filesystem Permissions. See ",(0,i.jsx)(s.a,{href:"#server-fails-to-save-media--create-sqlite-database--index-games--throws-a-permissions-denied--no-permission--eacces-error",children:"here"})]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"missing-box-arts",children:"Missing Box Arts"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/server-docs/metadata-enrichment/metadata",children:"Set up a Metadata Provider"})," that provides box art for your games."]}),"\n",(0,i.jsxs)(s.li,{children:["Clear media caches ",(0,i.jsx)(s.a,{href:"/docs/client-docs/gui#data",children:"in the settings."})]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"lack-of-metadata-in-games",children:"Lack of Metadata in Games"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:[(0,i.jsx)(s.a,{href:"/docs/server-docs/metadata-enrichment/metadata",children:"Set up a Metadata Provider"})," that provides metadata for your games."]}),"\n",(0,i.jsxs)(s.li,{children:["Verify if ",(0,i.jsx)(s.a,{href:"/docs/server-docs/configuration",children:"your Metadata Provider is disabled in your server configuration"}),"."]}),"\n",(0,i.jsxs)(s.li,{children:["Verify if ",(0,i.jsx)(s.a,{href:"/docs/server-docs/structure",children:"your file names are correct"})]}),"\n",(0,i.jsxs)(s.li,{children:["Verify if you accidently marked your game as ",(0,i.jsx)(s.code,{children:"(NC)"})," (No Cache Flag)"]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"lost-my-admin-role",children:"Lost my Admin Role"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Refer to ",(0,i.jsx)(s.a,{href:"./server-docs/user-management#admin-role-recovery",children:"this"})," for instructions on how to regain admin privileges for your user."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"forgot-my-admin-password",children:"Forgot my Admin Password"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Refer to ",(0,i.jsx)(s.a,{href:"./server-docs/user-management#admin-password-recovery",children:"this"})," for instructions on how to reset the password of your admin user."]}),"\n"]}),"\n",(0,i.jsx)(s.h3,{id:"game-downloads-are-slow",children:"Game Downloads are slow"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["Make sure the Clients Bandwidth Speed Limit is unset under ",(0,i.jsx)(s.code,{children:"Settings -> Application"})]}),"\n",(0,i.jsxs)(s.li,{children:["Make sure the Servers Bandwidth Speed Limit is unset (",(0,i.jsx)(s.code,{children:"SERVER_MAX_DOWNLOAD_BANDWIDTH_IN_KBPS"})," environment variable unset or 0)"]}),"\n",(0,i.jsx)(s.li,{children:"Restart your Client and Server"}),"\n",(0,i.jsx)(s.li,{children:"If your server is in your LAN, make sure you don't mistakenly access it from WAN"}),"\n",(0,i.jsx)(s.li,{children:"Check your middle-mans: Proxies, VPNs and older Network Hardware could all affect the download speeds."}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,s,r)=>{r.d(s,{R:()=>t,x:()=>a});var n=r(758);const i={},o=n.createContext(i);function t(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.c436fd83.js b/assets/js/9e4087bc.c436fd83.js deleted file mode 100644 index d5d99ddaa..000000000 --- a/assets/js/9e4087bc.c436fd83.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3608],{7579:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});a(5271);var r=a(6527),n=a(2922),s=a(9967),i=a(1956),c=a(3557),l=a(3221),o=a(2676);function d(e){let{year:t,posts:a}=e;const n=(0,i.P)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.Z,{as:"h3",id:t,children:t}),(0,o.jsx)("ul",{children:a.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(r.Z,{to:e.metadata.permalink,children:[(t=e.metadata.date,n.format(new Date(t)))," - ",e.metadata.title]})},e.metadata.date);var t}))})]})}function h(e){let{years:t}=e;return(0,o.jsx)("section",{className:"margin-vert--lg",children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:t.map(((e,t)=>(0,o.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,o.jsx)(d,{...e})},t)))})})})}function m(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),r=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),i=function(e){const t=e.reduce(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.d,{title:a,description:r}),(0,o.jsxs)(c.Z,{children:[(0,o.jsx)("header",{className:"hero hero--primary",children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(l.Z,{as:"h1",className:"hero__title",children:a}),(0,o.jsx)("p",{className:"hero__subtitle",children:r})]})}),(0,o.jsx)("main",{children:i.length>0&&(0,o.jsx)(h,{years:i})})]})]})}},1956:(e,t,a)=>{a.d(t,{P:()=>n});var r=a(6172);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,r.Z)(),a=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,r.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:a,...e})}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.ef008bbb.js b/assets/js/9e4087bc.ef008bbb.js new file mode 100644 index 000000000..16938f51c --- /dev/null +++ b/assets/js/9e4087bc.ef008bbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2711],{4597:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});a(758);var r=a(88),n=a(8072),s=a(5003),i=a(3886),c=a(3385),l=a(8038),o=a(6070);function d(e){let{year:t,posts:a}=e;const n=(0,i.i)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.A,{as:"h3",id:t,children:t}),(0,o.jsx)("ul",{children:a.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(r.A,{to:e.metadata.permalink,children:[(t=e.metadata.date,n.format(new Date(t)))," - ",e.metadata.title]})},e.metadata.date);var t}))})]})}function h(e){let{years:t}=e;return(0,o.jsx)("section",{className:"margin-vert--lg",children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:t.map(((e,t)=>(0,o.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,o.jsx)(d,{...e})},t)))})})})}function m(e){let{archive:t}=e;const a=(0,n.T)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),r=(0,n.T)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),i=function(e){const t=e.reduce(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.be,{title:a,description:r}),(0,o.jsxs)(c.A,{children:[(0,o.jsx)("header",{className:"hero hero--primary",children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(l.A,{as:"h1",className:"hero__title",children:a}),(0,o.jsx)("p",{className:"hero__subtitle",children:r})]})}),(0,o.jsx)("main",{children:i.length>0&&(0,o.jsx)(h,{years:i})})]})]})}},3886:(e,t,a)=>{a.d(t,{i:()=>n});var r=a(4480);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,r.A)(),a=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,r.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:a,...e})}}}]); \ No newline at end of file diff --git a/assets/js/9e75d8bf.09251459.js b/assets/js/9e75d8bf.09251459.js deleted file mode 100644 index 8526b3316..000000000 --- a/assets/js/9e75d8bf.09251459.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8444],{2611:a=>{a.exports=JSON.parse('{"tag":{"label":"platform values","permalink":"/blog/tags/platform-values","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/platform-values","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9e75d8bf.76ee71a4.js b/assets/js/9e75d8bf.76ee71a4.js new file mode 100644 index 000000000..2f394df93 --- /dev/null +++ b/assets/js/9e75d8bf.76ee71a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6569],{324:a=>{a.exports=JSON.parse('{"tag":{"label":"platform values","permalink":"/blog/tags/platform-values","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/platform-values","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/9fafd272.8c3e8bdf.js b/assets/js/9fafd272.52f35ff2.js similarity index 84% rename from assets/js/9fafd272.8c3e8bdf.js rename to assets/js/9fafd272.52f35ff2.js index 509a6a4dd..b5db89c41 100644 --- a/assets/js/9fafd272.8c3e8bdf.js +++ b/assets/js/9fafd272.52f35ff2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8666],{6839:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault","permalink":"/blog/tags/game-vault","allTagsPath":"/blog/tags","count":9,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault","page":1,"postsPerPage":10,"totalPages":1,"totalCount":9,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9482],{3917:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault","permalink":"/blog/tags/game-vault","allTagsPath":"/blog/tags","count":9,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault","page":1,"postsPerPage":10,"totalPages":1,"totalCount":9,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a1072f2a.635f4127.js b/assets/js/a1072f2a.635f4127.js new file mode 100644 index 000000000..1d3fab6fd --- /dev/null +++ b/assets/js/a1072f2a.635f4127.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4365],{8136:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>d,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>o});const s=JSON.parse('{"id":"client-docs/gui","title":"GUI Overview","description":"This documentation provides a clear overview of the Graphical User Interface (GUI) for GameVault. The GUI encompasses various tabs, each offering distinct functionalities.","source":"@site/docs/client-docs/gui.md","sourceDirName":"client-docs","slug":"/client-docs/gui","permalink":"/docs/client-docs/gui","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/gui.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":98,"frontMatter":{"sidebar_position":98},"sidebar":"docs","previous":{"title":"Data Management","permalink":"/docs/client-docs/data"},"next":{"title":"Themes","permalink":"/docs/client-docs/themes"}}');var t=n(6070),a=n(8591);const l={sidebar_position:98},d="GUI Overview",r={},o=[{value:"Setup Wizard",id:"setup-wizard",level:2},{value:"Library",id:"library",level:2},{value:"Game",id:"game",level:2},{value:"Game Settings",id:"game-settings",level:2},{value:"Your Computer",id:"your-computer",level:3},{value:"Installation",id:"installation",level:4},{value:"Launch Options",id:"launch-options",level:4},{value:"Server",id:"server",level:3},{value:"Edit Game Images",id:"edit-game-images",level:4},{value:"Metadata",id:"metadata",level:4},{value:"Custom Metadata",id:"custom-metadata",level:4},{value:"Downloads",id:"downloads",level:2},{value:"Community",id:"community",level:2},{value:"User Settings",id:"user-settings",level:2},{value:"Edit User Images",id:"edit-user-images",level:3},{value:"Edit Details",id:"edit-details",level:3},{value:"Settings",id:"settings",level:2},{value:"Application",id:"application",level:3},{value:"Installation",id:"installation-1",level:3},{value:"User",id:"user",level:3},{value:"Data",id:"data",level:3},{value:"Administration",id:"administration",level:2},{value:"News",id:"news",level:2}];function c(e){const i={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"gui-overview",children:"GUI Overview"})}),"\n",(0,t.jsx)(i.p,{children:"This documentation provides a clear overview of the Graphical User Interface (GUI) for GameVault. The GUI encompasses various tabs, each offering distinct functionalities."}),"\n",(0,t.jsx)(i.h2,{id:"setup-wizard",children:"Setup Wizard"}),"\n",(0,t.jsx)(i.p,{children:"The Setup Wizard is a sub-page that appears when the necessary settings for GameVault are not configured. It guides users through these settings with detailed explanations. Exiting the wizard is optional, as all settings can also be configured in the settings tab."}),"\n",(0,t.jsx)(i.h2,{id:"library",children:"Library"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Library Tab"",src:n(1957).A+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Browse available and installed games."}),"\n",(0,t.jsx)(i.li,{children:"Expand or collapse sections with expanders."}),"\n",(0,t.jsx)(i.li,{children:"Launch installed games by clicking the play button on box art."}),"\n",(0,t.jsx)(i.li,{children:"Download available games by clicking the download button on box art."}),"\n",(0,t.jsx)(i.li,{children:"Access game settings directly with the Settings icon."}),"\n",(0,t.jsx)(i.li,{children:"The paged Library loads a maximum of 80 games at once for bandwidth efficiency."}),"\n",(0,t.jsx)(i.li,{children:"Use the dice icon to open a random game on the server."}),"\n",(0,t.jsx)(i.li,{children:"Employ the Filter icon for server game filtering."}),"\n",(0,t.jsx)(i.li,{children:"Utilize the search bar to find specific games."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"game",children:"Game"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Game Page"",src:n(2772).A+"",width:"1920",height:"1040"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View comprehensive game details including a Media Player for Trailers/Gameplays/Screenshots"}),"\n",(0,t.jsx)(i.li,{children:"Descriptions and Notes can also be displayed as Markdown."}),"\n",(0,t.jsx)(i.li,{children:"Set progress states (e.g., completed or aborted)."}),"\n",(0,t.jsx)(i.li,{children:"Review personal progress and that of other users"}),"\n",(0,t.jsx)(i.li,{children:"Add games to the download queue or launch installed games."}),"\n",(0,t.jsx)(i.li,{children:"Bookmark the game or create a share link"}),"\n",(0,t.jsxs)(i.li,{children:["Navigate back to the Library Tab using the back-arrow button or ",(0,t.jsx)(i.code,{children:"ESC"})," key."]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"game-settings",children:"Game Settings"}),"\n",(0,t.jsx)(i.h3,{id:"your-computer",children:"Your Computer"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Settings affecting local game installations."}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View installation directory."}),"\n",(0,t.jsx)(i.li,{children:"Uninstall games."}),"\n",(0,t.jsx)(i.li,{children:"Check disk usage for the game."}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"launch-options",children:"Launch Options"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Set default executable and launch parameters."}),"\n",(0,t.jsx)(i.li,{children:"Create desktop shortcuts."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"server",children:"Server"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Settings affecting all users on the server (visible to editors or higher)."}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"edit-game-images",children:"Edit Game Images"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Set a different thumbnail/background image using URLs or uploads. Has also a button to simplify the search for box/background images"}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"metadata",children:"Metadata"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Metadata"",src:n(1491).A+"",width:"1920",height:"1038"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View available metadata providers."}),"\n",(0,t.jsx)(i.li,{children:"Change metadata providers priority."}),"\n",(0,t.jsx)(i.li,{children:"Unmap metadata providers. If unmaped the header text will be grayed out a bit and the action buttons are disabled."}),"\n",(0,t.jsx)(i.li,{children:"Recache selected metadata provider."}),"\n",(0,t.jsx)(i.li,{children:'Switch metadata from selectd metadata providers in the "Remap Game" section.'}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"custom-metadata",children:"Custom Metadata"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Custom Metadata"",src:n(3721).A+"",width:"1920",height:"1039"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Have full control of all the specific game details such as description, genres, tags etc including a preview of the current set data."}),"\n",(0,t.jsx)(i.li,{children:"Click the relead icon beside a game detail to load the current values into the textbox."}),"\n",(0,t.jsxs)(i.li,{children:["Clear all user overwritten details by clicking the related button on the top right.","\n",(0,t.jsx)(i.admonition,{title:"Format",type:"note",children:(0,t.jsx)(i.p,{children:"Multiple entries such as genres, tags etc. must be separated by a comma."})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"downloads",children:"Downloads"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Downloads Tab"",src:n(8115).A+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Monitor running and completed downloads."}),"\n",(0,t.jsx)(i.li,{children:"View download statistics and progress."}),"\n",(0,t.jsx)(i.li,{children:"Abort downloads."}),"\n",(0,t.jsx)(i.li,{children:"Extract game archives and view extraction progress."}),"\n",(0,t.jsx)(i.li,{children:"Perform installations based on game types."}),"\n",(0,t.jsx)(i.li,{children:"Open download folders and delete downloaded files."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"community",children:"Community"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Community Tab"",src:n(8091).A+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View all users on the GameVault Server."}),"\n",(0,t.jsx)(i.li,{children:"Select users for detailed game progress information."}),"\n",(0,t.jsx)(i.li,{children:"Sort and delete progresses."}),"\n",(0,t.jsx)(i.li,{children:"Edit user details and reload progresses."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"user-settings",children:"User Settings"}),"\n",(0,t.jsx)(i.h3,{id:"edit-user-images",children:"Edit User Images"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Set avatar/background images using URLs or uploads."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"edit-details",children:"Edit Details"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View and update user details."}),"\n",(0,t.jsx)(i.li,{children:"Update passwords with confirmation."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"settings",children:"Settings"}),"\n",(0,t.jsx)(i.h3,{id:"application",children:"Application"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Configure server URL and startup options."}),"\n",(0,t.jsx)(i.li,{children:"Change curren client theme or open the theme folder to insert your own."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"installation-1",children:"Installation"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Configure the donwload bandwidth limit."}),"\n",(0,t.jsx)(i.li,{children:"Set if you want to auto extract downloaded games and set a default password for encrypted archives."}),"\n",(0,t.jsx)(i.li,{children:"Set if portable games should be auto installed and if the install files should be auto deleted."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"user",children:"User"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Log In to GameVault Backend Server."}),"\n",(0,t.jsx)(i.li,{children:"Log Out from GameVault Backend Server."}),"\n",(0,t.jsx)(i.li,{children:"Register a new user on the GameVault Backend Server."}),"\n",(0,t.jsx)(i.li,{children:"Enter current User Settings"}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"data",children:"Data"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Select GameVault root path and clear image and offline caches."}),"\n",(0,t.jsx)(i.li,{children:"Clear image/offline cache"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"administration",children:"Administration"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Admin Tab"",src:n(4545).A+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Visible to admins only."}),"\n",(0,t.jsx)(i.li,{children:"View, activate/deactivate, and edit user roles."}),"\n",(0,t.jsx)(i.li,{children:"Delete or restore users."}),"\n",(0,t.jsx)(i.li,{children:"Open Community Tab profile by clicking on users' avatars."}),"\n",(0,t.jsx)(i.li,{children:"Re-index games on the server."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"news",children:"News"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""News"",src:n(5671).A+"",width:"1920",height:"1035"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"At the bottom left of the screen is a button with which you can display the latest news from gamevault or the server's own news."}),"\n",(0,t.jsx)(i.li,{children:"When new news are available the button will be marked with a red badged."}),"\n",(0,t.jsx)(i.li,{children:"News can also be displayed as Markdown."}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},4545:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/admin-0ad4037b89a248bffa4e939d647d326c.png"},8091:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/community-717286c80fce866c158ab595629a937a.png"},8115:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/downloads-895661ab44edeb12e017a72eb3442d34.png"},2772:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/game-45374cc5b999ec17b1ca3578f8ff926b.png"},3721:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/gamesettings_custom_metadata-693ae3ed5dbea28c3afa3b4e88bea21a.png"},1491:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/gamesettings_metadata-92dd4562e50f7332b17bf9b7f0915583.png"},1957:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/library-afce4846b08b60cecca986a39b1fa331.png"},5671:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/news-c0dbf35a1fb7b8c3573951a7649d2327.png"},8591:(e,i,n)=>{n.d(i,{R:()=>l,x:()=>d});var s=n(758);const t={},a=s.createContext(t);function l(e){const i=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a1072f2a.7616025d.js b/assets/js/a1072f2a.7616025d.js deleted file mode 100644 index a56c0c673..000000000 --- a/assets/js/a1072f2a.7616025d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7650],{1674:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>o});var t=n(2676),s=n(8358);const a={sidebar_position:98},l="GUI Overview",d={id:"client-docs/gui",title:"GUI Overview",description:"This documentation provides a clear overview of the Graphical User Interface (GUI) for GameVault. The GUI encompasses various tabs, each offering distinct functionalities.",source:"@site/docs/client-docs/gui.md",sourceDirName:"client-docs",slug:"/client-docs/gui",permalink:"/docs/client-docs/gui",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/gui.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:98,frontMatter:{sidebar_position:98},sidebar:"docs",previous:{title:"Data Management",permalink:"/docs/client-docs/data"},next:{title:"Themes",permalink:"/docs/client-docs/themes"}},r={},o=[{value:"Setup Wizard",id:"setup-wizard",level:2},{value:"Library",id:"library",level:2},{value:"Game",id:"game",level:2},{value:"Game Settings",id:"game-settings",level:2},{value:"Your Computer",id:"your-computer",level:3},{value:"Installation",id:"installation",level:4},{value:"Launch Options",id:"launch-options",level:4},{value:"Server",id:"server",level:3},{value:"Edit Game Images",id:"edit-game-images",level:4},{value:"Metadata",id:"metadata",level:4},{value:"Custom Metadata",id:"custom-metadata",level:4},{value:"Downloads",id:"downloads",level:2},{value:"Community",id:"community",level:2},{value:"User Settings",id:"user-settings",level:2},{value:"Edit User Images",id:"edit-user-images",level:3},{value:"Edit Details",id:"edit-details",level:3},{value:"Settings",id:"settings",level:2},{value:"Application",id:"application",level:3},{value:"Installation",id:"installation-1",level:3},{value:"User",id:"user",level:3},{value:"Data",id:"data",level:3},{value:"Administration",id:"administration",level:2},{value:"News",id:"news",level:2}];function c(e){const i={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"gui-overview",children:"GUI Overview"})}),"\n",(0,t.jsx)(i.p,{children:"This documentation provides a clear overview of the Graphical User Interface (GUI) for GameVault. The GUI encompasses various tabs, each offering distinct functionalities."}),"\n",(0,t.jsx)(i.h2,{id:"setup-wizard",children:"Setup Wizard"}),"\n",(0,t.jsx)(i.p,{children:"The Setup Wizard is a sub-page that appears when the necessary settings for GameVault are not configured. It guides users through these settings with detailed explanations. Exiting the wizard is optional, as all settings can also be configured in the settings tab."}),"\n",(0,t.jsx)(i.h2,{id:"library",children:"Library"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Library Tab"",src:n(5665).Z+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Browse available and installed games."}),"\n",(0,t.jsx)(i.li,{children:"Expand or collapse sections with expanders."}),"\n",(0,t.jsx)(i.li,{children:"Launch installed games by clicking the play button on box art."}),"\n",(0,t.jsx)(i.li,{children:"Download available games by clicking the download button on box art."}),"\n",(0,t.jsx)(i.li,{children:"Access game settings directly with the Settings icon."}),"\n",(0,t.jsx)(i.li,{children:"The paged Library loads a maximum of 80 games at once for bandwidth efficiency."}),"\n",(0,t.jsx)(i.li,{children:"Use the dice icon to open a random game on the server."}),"\n",(0,t.jsx)(i.li,{children:"Employ the Filter icon for server game filtering."}),"\n",(0,t.jsx)(i.li,{children:"Utilize the search bar to find specific games."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"game",children:"Game"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Game Page"",src:n(7345).Z+"",width:"1920",height:"1040"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View comprehensive game details including a Media Player for Trailers/Gameplays/Screenshots"}),"\n",(0,t.jsx)(i.li,{children:"Descriptions and Notes can also be displayed as Markdown."}),"\n",(0,t.jsx)(i.li,{children:"Set progress states (e.g., completed or aborted)."}),"\n",(0,t.jsx)(i.li,{children:"Review personal progress and that of other users"}),"\n",(0,t.jsx)(i.li,{children:"Add games to the download queue or launch installed games."}),"\n",(0,t.jsx)(i.li,{children:"Bookmark the game or create a share link"}),"\n",(0,t.jsxs)(i.li,{children:["Navigate back to the Library Tab using the back-arrow button or ",(0,t.jsx)(i.code,{children:"ESC"})," key."]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"game-settings",children:"Game Settings"}),"\n",(0,t.jsx)(i.h3,{id:"your-computer",children:"Your Computer"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Settings affecting local game installations."}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"installation",children:"Installation"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View installation directory."}),"\n",(0,t.jsx)(i.li,{children:"Uninstall games."}),"\n",(0,t.jsx)(i.li,{children:"Check disk usage for the game."}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"launch-options",children:"Launch Options"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Set default executable and launch parameters."}),"\n",(0,t.jsx)(i.li,{children:"Create desktop shortcuts."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"server",children:"Server"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Settings affecting all users on the server (visible to editors or higher)."}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"edit-game-images",children:"Edit Game Images"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Set a different thumbnail/background image using URLs or uploads. Has also a button to simplify the search for box/background images"}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"metadata",children:"Metadata"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Metadata"",src:n(413).Z+"",width:"1920",height:"1038"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View available metadata providers."}),"\n",(0,t.jsx)(i.li,{children:"Change metadata providers priority."}),"\n",(0,t.jsx)(i.li,{children:"Unmap metadata providers. If unmaped the header text will be grayed out a bit and the action buttons are disabled."}),"\n",(0,t.jsx)(i.li,{children:"Recache selected metadata provider."}),"\n",(0,t.jsx)(i.li,{children:'Switch metadata from selectd metadata providers in the "Remap Game" section.'}),"\n"]}),"\n",(0,t.jsx)(i.h4,{id:"custom-metadata",children:"Custom Metadata"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Custom Metadata"",src:n(951).Z+"",width:"1920",height:"1039"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Have full control of all the specific game details such as description, genres, tags etc including a preview of the current set data."}),"\n",(0,t.jsx)(i.li,{children:"Click the relead icon beside a game detail to load the current values into the textbox."}),"\n",(0,t.jsxs)(i.li,{children:["Clear all user overwritten details by clicking the related button on the top right.","\n",(0,t.jsx)(i.admonition,{title:"Format",type:"note",children:(0,t.jsx)(i.p,{children:"Multiple entries such as genres, tags etc. must be separated by a comma."})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"downloads",children:"Downloads"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Downloads Tab"",src:n(8250).Z+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Monitor running and completed downloads."}),"\n",(0,t.jsx)(i.li,{children:"View download statistics and progress."}),"\n",(0,t.jsx)(i.li,{children:"Abort downloads."}),"\n",(0,t.jsx)(i.li,{children:"Extract game archives and view extraction progress."}),"\n",(0,t.jsx)(i.li,{children:"Perform installations based on game types."}),"\n",(0,t.jsx)(i.li,{children:"Open download folders and delete downloaded files."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"community",children:"Community"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Community Tab"",src:n(9263).Z+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View all users on the GameVault Server."}),"\n",(0,t.jsx)(i.li,{children:"Select users for detailed game progress information."}),"\n",(0,t.jsx)(i.li,{children:"Sort and delete progresses."}),"\n",(0,t.jsx)(i.li,{children:"Edit user details and reload progresses."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"user-settings",children:"User Settings"}),"\n",(0,t.jsx)(i.h3,{id:"edit-user-images",children:"Edit User Images"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Set avatar/background images using URLs or uploads."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"edit-details",children:"Edit Details"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"View and update user details."}),"\n",(0,t.jsx)(i.li,{children:"Update passwords with confirmation."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"settings",children:"Settings"}),"\n",(0,t.jsx)(i.h3,{id:"application",children:"Application"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Configure server URL and startup options."}),"\n",(0,t.jsx)(i.li,{children:"Change curren client theme or open the theme folder to insert your own."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"installation-1",children:"Installation"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Configure the donwload bandwidth limit."}),"\n",(0,t.jsx)(i.li,{children:"Set if you want to auto extract downloaded games and set a default password for encrypted archives."}),"\n",(0,t.jsx)(i.li,{children:"Set if portable games should be auto installed and if the install files should be auto deleted."}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"user",children:"User"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Log In to GameVault Backend Server."}),"\n",(0,t.jsx)(i.li,{children:"Log Out from GameVault Backend Server."}),"\n",(0,t.jsx)(i.li,{children:"Register a new user on the GameVault Backend Server."}),"\n",(0,t.jsx)(i.li,{children:"Enter current User Settings"}),"\n"]}),"\n",(0,t.jsx)(i.h3,{id:"data",children:"Data"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Select GameVault root path and clear image and offline caches."}),"\n",(0,t.jsx)(i.li,{children:"Clear image/offline cache"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"administration",children:"Administration"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""Admin Tab"",src:n(7783).Z+"",width:"2560",height:"1401"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Visible to admins only."}),"\n",(0,t.jsx)(i.li,{children:"View, activate/deactivate, and edit user roles."}),"\n",(0,t.jsx)(i.li,{children:"Delete or restore users."}),"\n",(0,t.jsx)(i.li,{children:"Open Community Tab profile by clicking on users' avatars."}),"\n",(0,t.jsx)(i.li,{children:"Re-index games on the server."}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"news",children:"News"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:""News"",src:n(6550).Z+"",width:"1920",height:"1035"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"At the bottom left of the screen is a button with which you can display the latest news from gamevault or the server's own news."}),"\n",(0,t.jsx)(i.li,{children:"When new news are available the button will be marked with a red badged."}),"\n",(0,t.jsx)(i.li,{children:"News can also be displayed as Markdown."}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},7783:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/admin-0ad4037b89a248bffa4e939d647d326c.png"},9263:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/community-717286c80fce866c158ab595629a937a.png"},8250:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/downloads-895661ab44edeb12e017a72eb3442d34.png"},7345:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/game-45374cc5b999ec17b1ca3578f8ff926b.png"},951:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/gamesettings_custom_metadata-693ae3ed5dbea28c3afa3b4e88bea21a.png"},413:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/gamesettings_metadata-92dd4562e50f7332b17bf9b7f0915583.png"},5665:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/library-afce4846b08b60cecca986a39b1fa331.png"},6550:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/news-c0dbf35a1fb7b8c3573951a7649d2327.png"},8358:(e,i,n)=>{n.d(i,{Z:()=>d,a:()=>l});var t=n(5271);const s={},a=t.createContext(s);function l(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a1216fa4.53700068.js b/assets/js/a1216fa4.53700068.js new file mode 100644 index 000000000..a1f254d5e --- /dev/null +++ b/assets/js/a1216fa4.53700068.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8457],{81:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>c,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var a=n(1757),i=n(6070),o=n(8591);const l={title:"Celebrating 600+ Installations and announcing the upcoming big feature",authors:["alfagun74"],tags:["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},s=void 0,r={authorsImageUrls:[void 0]},u=[{value:"GameVault's Installation Pipeline",id:"gamevaults-installation-pipeline",level:4},{value:"Join us on Lemmy",id:"join-us-on-lemmy",level:4},{value:"Share GameVault with Others",id:"share-gamevault-with-others",level:4},{value:"Support Us",id:"support-us",level:4}];function m(e){const t={a:"a",code:"code",h4:"h4",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Hey everyone,"}),"\n",(0,i.jsxs)(t.p,{children:["We're excited to share some great news with you all! GameVault has reached a small milestone with over 600 official installations of our GameVault Client Application. What's even more amazing is that around 200 dedicated users, a third of these installations, have joined our ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," community to connect, chat, and share their experiences."]}),"\n",(0,i.jsx)(t.p,{children:"We want to express our immense gratitude for your incredible support, feedback, and love for GameVault. Your ongoing encouragement inspires us to push boundaries and enhance your gaming experience. We're thrilled to announce that an awesome update is being worked on right now - the highly anticipated release of GameVault's Installation Pipeline!"}),"\n",(0,i.jsx)(t.h4,{id:"gamevaults-installation-pipeline",children:"GameVault's Installation Pipeline"}),"\n",(0,i.jsxs)(t.p,{children:["The Installation Pipeline is designed to revolutionize how you install and manage your games. It was suggested by members on our ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord server"}),". We understand the challenges of navigating through different installation processes, especially for family members who may not be tech-savvy. With the Installation Pipeline, our goal is to simplify the entire process and make it user-friendly. Whether you're an experienced gamer or not, this update will make installing games easier for you."]}),"\n",(0,i.jsxs)(t.p,{children:["You can read the details ",(0,i.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues/18",children:"here on the GitHub issue"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Stay tuned for its upcoming release, and to be among the first to try out this awesome feature, make sure to subscribe to the ",(0,i.jsx)(t.code,{children:"@Updates"})," Role on our ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord server"})," , if you haven't already. We'll ping you as soon as it's live!"]}),"\n",(0,i.jsx)(t.h4,{id:"join-us-on-lemmy",children:"Join us on Lemmy"}),"\n",(0,i.jsxs)(t.p,{children:["To further connect with our amazing community, we're excited to announce the launch of our ",(0,i.jsx)(t.a,{href:"https://lemmy.world/c/phalcode",children:"official Lemmy community"}),". From now on, we'll also regularly share new blog posts there, providing you with more ways to stay informed and engaged. Join the Lemmy forum and become part of the growing GameVault community!"]}),"\n",(0,i.jsx)(t.h4,{id:"share-gamevault-with-others",children:"Share GameVault with Others"}),"\n",(0,i.jsx)(t.p,{children:"As we celebrate this milestone and eagerly anticipate more exciting updates, we invite you to spread the word about GameVault among your friends, family, and gaming or self-hosting communities. Your personal recommendations and referrals have played a significant role in our journey so far, and we believe they'll continue to do so in the future."}),"\n",(0,i.jsx)(t.p,{children:"We want to express our heartfelt appreciation for the feature requests, discussions, and invaluable help on our GitHub. Your support and collaborative efforts help a lot."}),"\n",(0,i.jsx)(t.h4,{id:"support-us",children:"Support Us"}),"\n",(0,i.jsx)(t.p,{children:"As we move forward, we kindly ask for your continued support. GameVault's success is currently solely built upon our incredible community, and your encouragement is what fuels us. If you love our app and believe in our vision, please consider supporting us in any way you can. It could even be something simple like a rating on the Microsoft Store. Your backing empowers us to keep our hard work going."}),"\n",(0,i.jsx)(t.p,{children:"We're eagerly looking forward to celebrating more achievements with all of you."}),"\n",(0,i.jsx)(t.p,{children:"Stay tuned, stay connected, and let's continue this journey together!"})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>s});var a=n(758);const i={},o=a.createContext(i);function l(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),a.createElement(o.Provider,{value:t},e.children)}},1757:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/24/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-24.md","source":"@site/blog/2023-07-24.md","title":"Celebrating 600+ Installations and announcing the upcoming big feature","description":"Hey everyone,","date":"2023-07-24T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone"},{"inline":true,"label":"official installations","permalink":"/blog/tags/official-installations"},{"inline":true,"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth"},{"inline":true,"label":"gratitude","permalink":"/blog/tags/gratitude"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault"},{"inline":true,"label":"upcoming update","permalink":"/blog/tags/upcoming-update"},{"inline":true,"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline"},{"inline":true,"label":"simplifying game installation","permalink":"/blog/tags/simplifying-game-installation"},{"inline":true,"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue"},{"inline":true,"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role"},{"inline":true,"label":"Lemmy community launch","permalink":"/blog/tags/lemmy-community-launch"},{"inline":true,"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"support request","permalink":"/blog/tags/support-request"},{"inline":true,"label":"continued support","permalink":"/blog/tags/continued-support"},{"inline":true,"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","authors":["alfagun74"],"tags":["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},"unlisted":false,"prevItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"},"nextItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"}}')}}]); \ No newline at end of file diff --git a/assets/js/a1216fa4.b3f075b9.js b/assets/js/a1216fa4.b3f075b9.js deleted file mode 100644 index c2ef4f572..000000000 --- a/assets/js/a1216fa4.b3f075b9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5662],{6746:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=t(2676),i=t(8358);const o={title:"Celebrating 600+ Installations and announcing the upcoming big feature",authors:["alfagun74"],tags:["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},l=void 0,s={permalink:"/blog/2023/07/24/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-24.md",source:"@site/blog/2023-07-24.md",title:"Celebrating 600+ Installations and announcing the upcoming big feature",description:"Hey everyone,",date:"2023-07-24T00:00:00.000Z",tags:[{inline:!0,label:"GameVault milestone",permalink:"/blog/tags/game-vault-milestone"},{inline:!0,label:"official installations",permalink:"/blog/tags/official-installations"},{inline:!0,label:"Discord community growth",permalink:"/blog/tags/discord-community-growth"},{inline:!0,label:"gratitude",permalink:"/blog/tags/gratitude"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"love for GameVault",permalink:"/blog/tags/love-for-game-vault"},{inline:!0,label:"upcoming update",permalink:"/blog/tags/upcoming-update"},{inline:!0,label:"Installation Pipeline",permalink:"/blog/tags/installation-pipeline"},{inline:!0,label:"simplifying game installation",permalink:"/blog/tags/simplifying-game-installation"},{inline:!0,label:"GitHub issue",permalink:"/blog/tags/git-hub-issue"},{inline:!0,label:"subscription to Updates role",permalink:"/blog/tags/subscription-to-updates-role"},{inline:!0,label:"Lemmy community launch",permalink:"/blog/tags/lemmy-community-launch"},{inline:!0,label:"sharing blog posts",permalink:"/blog/tags/sharing-blog-posts"},{inline:!0,label:"spreading the word",permalink:"/blog/tags/spreading-the-word"},{inline:!0,label:"support request",permalink:"/blog/tags/support-request"},{inline:!0,label:"continued support",permalink:"/blog/tags/continued-support"},{inline:!0,label:"celebration of achievements",permalink:"/blog/tags/celebration-of-achievements"}],readingTime:2.39,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Celebrating 600+ Installations and announcing the upcoming big feature",authors:["alfagun74"],tags:["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},unlisted:!1,prevItem:{title:"Please help us prioritize!",permalink:"/blog/2023/07/29/"},nextItem:{title:"The Migrations are finally completed",permalink:"/blog/2023/07/20/"}},r={authorsImageUrls:[void 0]},u=[{value:"GameVault's Installation Pipeline",id:"gamevaults-installation-pipeline",level:4},{value:"Join us on Lemmy",id:"join-us-on-lemmy",level:4},{value:"Share GameVault with Others",id:"share-gamevault-with-others",level:4},{value:"Support Us",id:"support-us",level:4}];function m(e){const n={a:"a",code:"code",h4:"h4",p:"p",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"Hey everyone,"}),"\n",(0,a.jsxs)(n.p,{children:["We're excited to share some great news with you all! GameVault has reached a small milestone with over 600 official installations of our GameVault Client Application. What's even more amazing is that around 200 dedicated users, a third of these installations, have joined our ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," community to connect, chat, and share their experiences."]}),"\n",(0,a.jsx)(n.p,{children:"We want to express our immense gratitude for your incredible support, feedback, and love for GameVault. Your ongoing encouragement inspires us to push boundaries and enhance your gaming experience. We're thrilled to announce that an awesome update is being worked on right now - the highly anticipated release of GameVault's Installation Pipeline!"}),"\n",(0,a.jsx)(n.h4,{id:"gamevaults-installation-pipeline",children:"GameVault's Installation Pipeline"}),"\n",(0,a.jsxs)(n.p,{children:["The Installation Pipeline is designed to revolutionize how you install and manage your games. It was suggested by members on our ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord server"}),". We understand the challenges of navigating through different installation processes, especially for family members who may not be tech-savvy. With the Installation Pipeline, our goal is to simplify the entire process and make it user-friendly. Whether you're an experienced gamer or not, this update will make installing games easier for you."]}),"\n",(0,a.jsxs)(n.p,{children:["You can read the details ",(0,a.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-app/issues/18",children:"here on the GitHub issue"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["Stay tuned for its upcoming release, and to be among the first to try out this awesome feature, make sure to subscribe to the ",(0,a.jsx)(n.code,{children:"@Updates"})," Role on our ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord server"})," , if you haven't already. We'll ping you as soon as it's live!"]}),"\n",(0,a.jsx)(n.h4,{id:"join-us-on-lemmy",children:"Join us on Lemmy"}),"\n",(0,a.jsxs)(n.p,{children:["To further connect with our amazing community, we're excited to announce the launch of our ",(0,a.jsx)(n.a,{href:"https://lemmy.world/c/phalcode",children:"official Lemmy community"}),". From now on, we'll also regularly share new blog posts there, providing you with more ways to stay informed and engaged. Join the Lemmy forum and become part of the growing GameVault community!"]}),"\n",(0,a.jsx)(n.h4,{id:"share-gamevault-with-others",children:"Share GameVault with Others"}),"\n",(0,a.jsx)(n.p,{children:"As we celebrate this milestone and eagerly anticipate more exciting updates, we invite you to spread the word about GameVault among your friends, family, and gaming or self-hosting communities. Your personal recommendations and referrals have played a significant role in our journey so far, and we believe they'll continue to do so in the future."}),"\n",(0,a.jsx)(n.p,{children:"We want to express our heartfelt appreciation for the feature requests, discussions, and invaluable help on our GitHub. Your support and collaborative efforts help a lot."}),"\n",(0,a.jsx)(n.h4,{id:"support-us",children:"Support Us"}),"\n",(0,a.jsx)(n.p,{children:"As we move forward, we kindly ask for your continued support. GameVault's success is currently solely built upon our incredible community, and your encouragement is what fuels us. If you love our app and believe in our vision, please consider supporting us in any way you can. It could even be something simple like a rating on the Microsoft Store. Your backing empowers us to keep our hard work going."}),"\n",(0,a.jsx)(n.p,{children:"We're eagerly looking forward to celebrating more achievements with all of you."}),"\n",(0,a.jsx)(n.p,{children:"Stay tuned, stay connected, and let's continue this journey together!"})]})}function c(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},8358:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>l});var a=t(5271);const i={},o=a.createContext(i);function l(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a1f57275.aa4d0682.js b/assets/js/a1f57275.aa4d0682.js new file mode 100644 index 000000000..1652e486f --- /dev/null +++ b/assets/js/a1f57275.aa4d0682.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2333],{2348:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>g,frontMatter:()=>l,metadata:()=>r,toc:()=>u});var r=t(5518),n=t(6070),o=t(8591);const l={title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",authors:["alfagun74"],tags:["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},i=void 0,s={authorsImageUrls:[void 0]},u=[];function m(e){const a={a:"a",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey Guys,"}),"\n",(0,n.jsx)(a.p,{children:"Our team has been working tirelessly for the past year on creating GameVault, the source-available, self-hosted, and free alternative to traditional cloud-based game platforms like Steam, Origin, Epic Games, and GoG. We are excited to share that GameVault is now available for everyone to use, and we are delighted to disclose it to the community. "}),"\n",(0,n.jsx)(a.p,{children:"With GameVault, you can play and track games together with your friends on a shared file server, free from any restrictions that traditional game platforms may impose. We have designed it to work with DRM-free games, providing a unique solution for those who want a more flexible and open approach to gaming. Think of it like Jellyfin, but for Videogames."}),"\n",(0,n.jsx)(a.p,{children:"GameVault offers a self-hosted approach that gives you complete control over your gaming experience. The platform enables you to browse your server's game collection, securely download games, launch and play them, and even track your playtimes and progress - regardless of whether the server is offline. Additionally, you can compare stats and play states with other users on the server."}),"\n",(0,n.jsx)(a.p,{children:"Our server features offer automatic indexing of games on the file system into a database, enrichment of games with metadata like tags and genres using RAWG API, multi-user authentication, and configurable logging. We have also implemented health monitoring, full-text search, filters, sorting, pagination, and a fully documented API. The GameVault platform is highly configurable to suit your needs."}),"\n",(0,n.jsxs)(a.p,{children:["We are thrilled that you have found us, and we invite you to try GameVault today. We would be grateful for any contributions, feedback, bug reports, and feature requests you might have. You can also support us by donating using the links provided on our website. If you have any questions or would like to connect with other GameVault users, please join our ",(0,n.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", Reddit and Lemmy communities - links to which are available in the footer."]}),"\n",(0,n.jsx)(a.p,{children:"We are passionate about creating a gaming experience that is more open, flexible, and enjoyable for everyone. We hope you will join us on this journey and experience the benefits of a truly source-available alternative to traditional game platforms with GameVault."})]})}function g(e={}){const{wrapper:a}={...(0,o.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},8591:(e,a,t)=>{t.d(a,{R:()=>l,x:()=>i});var r=t(758);const n={},o=r.createContext(n);function l(e){const a=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),r.createElement(o.Provider,{value:a},e.children)}},5518:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-01.md","source":"@site/blog/2023-07-01.md","title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","description":"Hey Guys,","date":"2023-07-01T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"alternative","permalink":"/blog/tags/alternative"},{"inline":true,"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms"},{"inline":true,"label":"DRM-free games","permalink":"/blog/tags/drm-free-games"},{"inline":true,"label":"file server","permalink":"/blog/tags/file-server"},{"inline":true,"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"RAWG API","permalink":"/blog/tags/rawg-api"},{"inline":true,"label":"health monitoring","permalink":"/blog/tags/health-monitoring"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"Discord server","permalink":"/blog/tags/discord-server"},{"inline":true,"label":"Reddit forum","permalink":"/blog/tags/reddit-forum"},{"inline":true,"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum"}],"readingTime":1.78,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","authors":["alfagun74"],"tags":["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},"unlisted":false,"prevItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}}')}}]); \ No newline at end of file diff --git a/assets/js/a1f57275.f5d129b3.js b/assets/js/a1f57275.f5d129b3.js deleted file mode 100644 index be00713dc..000000000 --- a/assets/js/a1f57275.f5d129b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5325],{2688:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>g,frontMatter:()=>l,metadata:()=>r,toc:()=>m});var n=t(2676),o=t(8358);const l={title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",authors:["alfagun74"],tags:["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},i=void 0,r={permalink:"/blog/2023/07/01/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-01.md",source:"@site/blog/2023-07-01.md",title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",description:"Hey Guys,",date:"2023-07-01T00:00:00.000Z",tags:[{inline:!0,label:"gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"source-available",permalink:"/blog/tags/source-available"},{inline:!0,label:"self-hosted",permalink:"/blog/tags/self-hosted"},{inline:!0,label:"alternative",permalink:"/blog/tags/alternative"},{inline:!0,label:"cloud-based game platforms",permalink:"/blog/tags/cloud-based-game-platforms"},{inline:!0,label:"DRM-free games",permalink:"/blog/tags/drm-free-games"},{inline:!0,label:"file server",permalink:"/blog/tags/file-server"},{inline:!0,label:"multi-user authentication",permalink:"/blog/tags/multi-user-authentication"},{inline:!0,label:"metadata",permalink:"/blog/tags/metadata"},{inline:!0,label:"RAWG API",permalink:"/blog/tags/rawg-api"},{inline:!0,label:"health monitoring",permalink:"/blog/tags/health-monitoring"},{inline:!0,label:"API",permalink:"/blog/tags/api"},{inline:!0,label:"Discord server",permalink:"/blog/tags/discord-server"},{inline:!0,label:"Reddit forum",permalink:"/blog/tags/reddit-forum"},{inline:!0,label:"Lemmy forum",permalink:"/blog/tags/lemmy-forum"}],readingTime:1.78,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",authors:["alfagun74"],tags:["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},unlisted:!1,prevItem:{title:"Choosing a New, Family-Friendly Name for this project!",permalink:"/blog/2023/07/08/"}},s={authorsImageUrls:[void 0]},m=[];function u(e){const a={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey Guys,"}),"\n",(0,n.jsx)(a.p,{children:"Our team has been working tirelessly for the past year on creating GameVault, the source-available, self-hosted, and free alternative to traditional cloud-based game platforms like Steam, Origin, Epic Games, and GoG. We are excited to share that GameVault is now available for everyone to use, and we are delighted to disclose it to the community. "}),"\n",(0,n.jsx)(a.p,{children:"With GameVault, you can play and track games together with your friends on a shared file server, free from any restrictions that traditional game platforms may impose. We have designed it to work with DRM-free games, providing a unique solution for those who want a more flexible and open approach to gaming. Think of it like Jellyfin, but for Videogames."}),"\n",(0,n.jsx)(a.p,{children:"GameVault offers a self-hosted approach that gives you complete control over your gaming experience. The platform enables you to browse your server's game collection, securely download games, launch and play them, and even track your playtimes and progress - regardless of whether the server is offline. Additionally, you can compare stats and play states with other users on the server."}),"\n",(0,n.jsx)(a.p,{children:"Our server features offer automatic indexing of games on the file system into a database, enrichment of games with metadata like tags and genres using RAWG API, multi-user authentication, and configurable logging. We have also implemented health monitoring, full-text search, filters, sorting, pagination, and a fully documented API. The GameVault platform is highly configurable to suit your needs."}),"\n",(0,n.jsxs)(a.p,{children:["We are thrilled that you have found us, and we invite you to try GameVault today. We would be grateful for any contributions, feedback, bug reports, and feature requests you might have. You can also support us by donating using the links provided on our website. If you have any questions or would like to connect with other GameVault users, please join our ",(0,n.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", Reddit and Lemmy communities - links to which are available in the footer."]}),"\n",(0,n.jsx)(a.p,{children:"We are passionate about creating a gaming experience that is more open, flexible, and enjoyable for everyone. We hope you will join us on this journey and experience the benefits of a truly source-available alternative to traditional game platforms with GameVault."})]})}function g(e={}){const{wrapper:a}={...(0,o.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>r,a:()=>i});var n=t(5271);const o={},l=n.createContext(o);function i(e){const a=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a3fd4b44.55b11bf1.js b/assets/js/a3fd4b44.55b11bf1.js deleted file mode 100644 index d78d9fc74..000000000 --- a/assets/js/a3fd4b44.55b11bf1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9303],{9921:e=>{e.exports=JSON.parse('{"tag":{"label":"file server","permalink":"/blog/tags/file-server","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/file-server","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a3fd4b44.6d8f20c3.js b/assets/js/a3fd4b44.6d8f20c3.js new file mode 100644 index 000000000..6a9850ace --- /dev/null +++ b/assets/js/a3fd4b44.6d8f20c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[11],{4080:e=>{e.exports=JSON.parse('{"tag":{"label":"file server","permalink":"/blog/tags/file-server","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/file-server","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a67f6c3e.40a0a035.js b/assets/js/a67f6c3e.0e7afd75.js similarity index 84% rename from assets/js/a67f6c3e.40a0a035.js rename to assets/js/a67f6c3e.0e7afd75.js index dd2ebb711..e103fb7d9 100644 --- a/assets/js/a67f6c3e.40a0a035.js +++ b/assets/js/a67f6c3e.0e7afd75.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2999],{8758:a=>{a.exports=JSON.parse('{"tag":{"label":"videogame","permalink":"/blog/tags/videogame","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/videogame","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2652],{5054:a=>{a.exports=JSON.parse('{"tag":{"label":"videogame","permalink":"/blog/tags/videogame","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/videogame","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.87c8d08d.js b/assets/js/a6aa9e1f.87c8d08d.js deleted file mode 100644 index 90b9b8e50..000000000 --- a/assets/js/a6aa9e1f.87c8d08d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3089],{8602:(e,t,a)=>{a.r(t),a.d(t,{default:()=>j});a(5271);var n=a(4814),s=a(6172),r=a(9967),l=a(3509),i=a(6566),o=a(3400),c=a(8625),d=a(2740),m=a(2791),g=a(5023),u=a(2676);function h(e){const t=(0,g.CS)(e);return(0,u.jsx)(m.Z,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function x(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,s.Z)(),{blogDescription:n,blogTitle:l,permalink:i}=t,o="/"===i?a:l;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.d,{title:o,description:n}),(0,u.jsx)(c.Z,{tag:"blog_posts_list"})]})}function p(e){const{metadata:t,items:a,sidebar:n}=e;return(0,u.jsxs)(i.Z,{sidebar:n,children:[(0,u.jsx)(d.Z,{items:a}),(0,u.jsx)(o.Z,{metadata:t})]})}function j(e){return(0,u.jsxs)(r.FG,{className:(0,n.Z)(l.k.wrapper.blogPages,l.k.page.blogListPage),children:[(0,u.jsx)(x,{...e}),(0,u.jsx)(h,{...e}),(0,u.jsx)(p,{...e})]})}},3400:(e,t,a)=>{a.d(t,{Z:()=>l});a(5271);var n=a(2922),s=a(5066),r=a(2676);function l(e){const{metadata:t}=e,{previousPage:a,nextPage:l}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,r.jsx)(s.Z,{permalink:a,title:(0,r.jsx)(n.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),l&&(0,r.jsx)(s.Z,{permalink:l,title:(0,r.jsx)(n.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},9449:(e,t,a)=>{a.d(t,{Z:()=>R});a(5271);var n=a(4814),s=a(5023),r=a(2676);function l(e){let{children:t,className:a}=e;return(0,r.jsx)("article",{className:a,children:t})}var i=a(6527);const o={title:"title_c9tz"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:l}=(0,s.nO)(),{permalink:c,title:d}=a,m=l?"h1":"h2";return(0,r.jsx)(m,{className:(0,n.Z)(o.title,t),children:l?d:(0,r.jsx)(i.Z,{to:c,children:d})})}var d=a(2922),m=a(2351),g=a(1956);const u={container:"container_xAnX"};function h(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,m.c)();return t=>{const a=Math.ceil(t);return e(a,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return(0,r.jsx)(r.Fragment,{children:a(t)})}function x(e){let{date:t,formattedDate:a}=e;return(0,r.jsx)("time",{dateTime:t,children:a})}function p(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:a}=(0,s.nO)(),{date:l,readingTime:i}=a,o=(0,g.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,n.Z)(u.container,"margin-vert--md",t),children:[(0,r.jsx)(x,{date:l,formattedDate:(c=l,o.format(new Date(c)))}),void 0!==i&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(p,{}),(0,r.jsx)(h,{readingTime:i})]})]});var c}var b=a(8059);const f={authorCol:"authorCol_btVC",imageOnlyAuthorRow:"imageOnlyAuthorRow_fBnr",imageOnlyAuthorCol:"imageOnlyAuthorCol_Y2d8"};function Z(e){let{className:t}=e;const{metadata:{authors:a},assets:l}=(0,s.nO)();if(0===a.length)return null;const i=a.every((e=>{let{name:t}=e;return!t})),o=1===a.length;return(0,r.jsx)("div",{className:(0,n.Z)("margin-top--md margin-bottom--sm",i?f.imageOnlyAuthorRow:"row",t),children:a.map(((e,t)=>(0,r.jsx)("div",{className:(0,n.Z)(!i&&(o?"col col--12":"col col--6"),i?f.imageOnlyAuthorCol:f.authorCol),children:(0,r.jsx)(b.Z,{author:{...e,imageURL:l.authorsImageUrls[t]??e.imageURL}})},t)))})}function v(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(j,{}),(0,r.jsx)(Z,{})]})}var N=a(5678),w=a(2714);function k(e){let{children:t,className:a}=e;const{isBlogPostPage:l}=(0,s.nO)();return(0,r.jsx)("div",{id:l?N.uR:void 0,className:(0,n.Z)("markdown",a),children:(0,r.jsx)(w.Z,{children:t})})}var T=a(3509),P=a(3362),y=a(9813);function O(){return(0,r.jsx)("b",{children:(0,r.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function A(e){const{blogPostTitle:t,...a}=e;return(0,r.jsx)(i.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...a,children:(0,r.jsx)(O,{})})}function C(){const{metadata:e,isBlogPostPage:t}=(0,s.nO)(),{tags:a,title:l,editUrl:i,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,g=a.length>0;if(!(g||m||i))return null;if(t){const e=!!(i||d||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[g&&(0,r.jsx)("div",{className:(0,n.Z)("row","margin-top--sm",T.k.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(y.Z,{tags:a})})}),e&&(0,r.jsx)(P.Z,{className:(0,n.Z)("margin-top--sm",T.k.blog.blogFooterEditMetaRow),editUrl:i,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[g&&(0,r.jsx)("div",{className:(0,n.Z)("col",{"col--9":m}),children:(0,r.jsx)(y.Z,{tags:a})}),m&&(0,r.jsx)("div",{className:(0,n.Z)("col text--right",{"col--3":g}),children:(0,r.jsx)(A,{blogPostTitle:l,to:e.permalink})})]})}function R(e){let{children:t,className:a}=e;const i=function(){const{isBlogPostPage:e}=(0,s.nO)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(l,{className:(0,n.Z)(i,a),children:[(0,r.jsx)(v,{}),(0,r.jsx)(k,{children:t}),(0,r.jsx)(C,{})]})}},2740:(e,t,a)=>{a.d(t,{Z:()=>l});a(5271);var n=a(5023),s=a(9449),r=a(2676);function l(e){let{items:t,component:a=s.Z}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,r.jsx)(n.n4,{content:t,children:(0,r.jsx)(a,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.eb8f82b5.js b/assets/js/a6aa9e1f.eb8f82b5.js new file mode 100644 index 000000000..5540bb89f --- /dev/null +++ b/assets/js/a6aa9e1f.eb8f82b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7643],{4939:(e,t,a)=>{a.r(t),a.d(t,{default:()=>j});a(758);var s=a(3526),n=a(4480),r=a(5003),l=a(8539),i=a(8777),o=a(6191),c=a(4981),d=a(8098),m=a(950),g=a(7073),u=a(6070);function h(e){const t=(0,g.kJ)(e);return(0,u.jsx)(m.A,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,n.A)(),{blogDescription:s,blogTitle:l,permalink:i}=t,o="/"===i?a:l;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.be,{title:o,description:s}),(0,u.jsx)(c.A,{tag:"blog_posts_list"})]})}function x(e){const{metadata:t,items:a,sidebar:s}=e;return(0,u.jsxs)(i.A,{sidebar:s,children:[(0,u.jsx)(d.A,{items:a}),(0,u.jsx)(o.A,{metadata:t})]})}function j(e){return(0,u.jsxs)(r.e3,{className:(0,s.A)(l.G.wrapper.blogPages,l.G.page.blogListPage),children:[(0,u.jsx)(p,{...e}),(0,u.jsx)(h,{...e}),(0,u.jsx)(x,{...e})]})}},6191:(e,t,a)=>{a.d(t,{A:()=>l});a(758);var s=a(8072),n=a(5336),r=a(6070);function l(e){const{metadata:t}=e,{previousPage:a,nextPage:l}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,r.jsx)(n.A,{permalink:a,title:(0,r.jsx)(s.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),l&&(0,r.jsx)(n.A,{permalink:l,title:(0,r.jsx)(s.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},8736:(e,t,a)=>{a.d(t,{A:()=>_});a(758);var s=a(3526),n=a(7073),r=a(6070);function l(e){let{children:t,className:a}=e;return(0,r.jsx)("article",{className:a,children:t})}var i=a(88);const o={title:"title_C9tp"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:l}=(0,n.e7)(),{permalink:c,title:d}=a,m=l?"h1":"h2";return(0,r.jsx)(m,{className:(0,s.A)(o.title,t),children:l?d:(0,r.jsx)(i.A,{to:c,children:d})})}var d=a(8072),m=a(7773),g=a(3886);const u={container:"container_eyWC"};function h(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,m.W)();return t=>{const a=Math.ceil(t);return e(a,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return(0,r.jsx)(r.Fragment,{children:a(t)})}function p(e){let{date:t,formattedDate:a}=e;return(0,r.jsx)("time",{dateTime:t,children:a})}function x(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:a}=(0,n.e7)(),{date:l,readingTime:i}=a,o=(0,g.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,s.A)(u.container,"margin-vert--md",t),children:[(0,r.jsx)(p,{date:l,formattedDate:(c=l,o.format(new Date(c)))}),void 0!==i&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(x,{}),(0,r.jsx)(h,{readingTime:i})]})]});var c}var A=a(5582);const b={authorCol:"authorCol_GZzj",imageOnlyAuthorRow:"imageOnlyAuthorRow_oXEi",imageOnlyAuthorCol:"imageOnlyAuthorCol_kgo0"};function f(e){let{className:t}=e;const{metadata:{authors:a},assets:l}=(0,n.e7)();if(0===a.length)return null;const i=a.every((e=>{let{name:t}=e;return!t})),o=1===a.length;return(0,r.jsx)("div",{className:(0,s.A)("margin-top--md margin-bottom--sm",i?b.imageOnlyAuthorRow:"row",t),children:a.map(((e,t)=>(0,r.jsx)("div",{className:(0,s.A)(!i&&(o?"col col--12":"col col--6"),i?b.imageOnlyAuthorCol:b.authorCol),children:(0,r.jsx)(A.A,{author:{...e,imageURL:l.authorsImageUrls[t]??e.imageURL}})},t)))})}function v(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(j,{}),(0,r.jsx)(f,{})]})}var N=a(3652),T=a(3416);function w(e){let{children:t,className:a}=e;const{isBlogPostPage:l}=(0,n.e7)();return(0,r.jsx)("div",{id:l?N.LU:void 0,className:(0,s.A)("markdown",a),children:(0,r.jsx)(T.A,{children:t})})}var k=a(8539),y=a(3739),P=a(7304);function C(){return(0,r.jsx)("b",{children:(0,r.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function U(e){const{blogPostTitle:t,...a}=e;return(0,r.jsx)(i.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...a,children:(0,r.jsx)(C,{})})}function R(){const{metadata:e,isBlogPostPage:t}=(0,n.e7)(),{tags:a,title:l,editUrl:i,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,g=a.length>0;if(!(g||m||i))return null;if(t){const e=!!(i||d||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[g&&(0,r.jsx)("div",{className:(0,s.A)("row","margin-top--sm",k.G.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(P.A,{tags:a})})}),e&&(0,r.jsx)(y.A,{className:(0,s.A)("margin-top--sm",k.G.blog.blogFooterEditMetaRow),editUrl:i,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[g&&(0,r.jsx)("div",{className:(0,s.A)("col",{"col--9":m}),children:(0,r.jsx)(P.A,{tags:a})}),m&&(0,r.jsx)("div",{className:(0,s.A)("col text--right",{"col--3":g}),children:(0,r.jsx)(U,{blogPostTitle:l,to:e.permalink})})]})}function _(e){let{children:t,className:a}=e;const i=function(){const{isBlogPostPage:e}=(0,n.e7)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(l,{className:(0,s.A)(i,a),children:[(0,r.jsx)(v,{}),(0,r.jsx)(w,{children:t}),(0,r.jsx)(R,{})]})}},8098:(e,t,a)=>{a.d(t,{A:()=>l});a(758);var s=a(7073),n=a(8736),r=a(6070);function l(e){let{items:t,component:a=n.A}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,r.jsx)(s.in,{content:t,children:(0,r.jsx)(a,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a6fed517.59bc7dcb.js b/assets/js/a6fed517.54a1ad12.js similarity index 84% rename from assets/js/a6fed517.59bc7dcb.js rename to assets/js/a6fed517.54a1ad12.js index 18fae037a..f3c7dd397 100644 --- a/assets/js/a6fed517.59bc7dcb.js +++ b/assets/js/a6fed517.54a1ad12.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4884],{3063:a=>{a.exports=JSON.parse('{"tag":{"label":"database","permalink":"/blog/tags/database","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/database","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7672],{5219:a=>{a.exports=JSON.parse('{"tag":{"label":"database","permalink":"/blog/tags/database","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/database","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a7456010.c4d9ffaa.js b/assets/js/a7456010.543d0101.js similarity index 66% rename from assets/js/a7456010.c4d9ffaa.js rename to assets/js/a7456010.543d0101.js index f0cc4d966..1ee3f8756 100644 --- a/assets/js/a7456010.c4d9ffaa.js +++ b/assets/js/a7456010.543d0101.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5980],{9365:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1235],{8552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.4ca513a1.js b/assets/js/a7bd4aaa.4ca513a1.js new file mode 100644 index 000000000..e8a9a50ea --- /dev/null +++ b/assets/js/a7bd4aaa.4ca513a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7098],{7278:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(758);var r=s(5003),o=s(9419),t=s(6235),c=s(389),a=s(4981),i=s(6070);function u(n){const{version:e}=n;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.A,{version:e.version,tag:(0,o.k)(e.pluginId,e.version)}),(0,i.jsx)(r.be,{children:e.noIndex&&(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,i.jsx)(r.e3,{className:e.className,children:(0,i.jsx)(t.n,{version:e,children:(0,c.v)(s.routes)})})}function d(n){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(u,{...n}),(0,i.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.b6217e6b.js b/assets/js/a7bd4aaa.b6217e6b.js deleted file mode 100644 index 56ec77b2f..000000000 --- a/assets/js/a7bd4aaa.b6217e6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8518],{2767:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(5271);var r=s(9967),o=s(684),t=s(5219),c=s(7677),a=s(8625),i=s(2676);function u(n){const{version:e}=n;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.Z,{version:e.version,tag:(0,o.J)(e.pluginId,e.version)}),(0,i.jsx)(r.d,{children:e.noIndex&&(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,i.jsx)(r.FG,{className:e.className,children:(0,i.jsx)(t.q,{version:e,children:(0,c.H)(s.routes)})})}function d(n){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(u,{...n}),(0,i.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a7d982d4.7f0435a0.js b/assets/js/a7d982d4.7f0435a0.js new file mode 100644 index 000000000..888eab906 --- /dev/null +++ b/assets/js/a7d982d4.7f0435a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7268],{6713:a=>{a.exports=JSON.parse('{"tag":{"label":"software","permalink":"/blog/tags/software","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a7d982d4.8de9df24.js b/assets/js/a7d982d4.8de9df24.js deleted file mode 100644 index 6bf68a98c..000000000 --- a/assets/js/a7d982d4.8de9df24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4691],{66:a=>{a.exports=JSON.parse('{"tag":{"label":"software","permalink":"/blog/tags/software","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.4436cafa.js b/assets/js/a94703ab.4436cafa.js deleted file mode 100644 index aa74d916f..000000000 --- a/assets/js/a94703ab.4436cafa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4368],{7872:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(5271),o=n(4814),i=n(9967),s=n(3509),l=n(4376),r=n(1081),c=n(2922),d=n(1309),u=n(4890);const m={backToTopButton:"backToTopButton_WX52",backToTopButtonShow:"backToTopButtonShow_OIBR"};var b=n(2676);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a {e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(9276),x=n(3225),f=n(3320),j=n(9364),_=n(698);function v(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const k={collapseSidebarButton:"collapseSidebarButton_t0mP",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_yoHO"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",k.collapseSidebarButton),onClick:t,children:(0,b.jsx)(v,{className:k.collapseSidebarButtonIcon})})}var C=n(6701),S=n(8274);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(3955),Z=n(6422),A=n(6527),y=n(6594);function L(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),_=function(e){const t=(0,y.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),v=(0,l._F)(t,i),k=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!v&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:v,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":k}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":v}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":k?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!g:void 0,href:h?_??"#":_,...d,children:m}),x&&h&&(0,b.jsx)(L,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(374),H=n(2366);const M={menuExternalLink:"menuExternalLink_EnPB"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const P={menuHtmlItem:"menuHtmlItem_KuMc"};function W(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[P.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function F(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(W,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(F,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_R21V",menuWithAnnouncementBar:"menuWithAnnouncementBar_BzAP"};function z(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.n)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_bUer",K="sidebarWithHideableNavbar_SoJA",O="sidebarHidden_UCvX",X="sidebarLogo_rxVR";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&K,i&&O),children:[s&&(0,b.jsx)(_.Z,{tabIndex:-1,className:X}),(0,b.jsx)(z,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const G=a.memo(q);var J=n(3158),Q=n(8568);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,Q.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(J.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(G,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_RF0L",expandButtonIcon:"expandButtonIcon_KM58"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(v,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_HC4d",docSidebarContainerHidden:"docSidebarContainerHidden_ZfRM",sidebarViewport:"sidebarViewport_N_1E"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer__7rY",docMainContainerEnhanced:"docMainContainerEnhanced_dowq",docItemWrapperEnhanced:"docItemWrapperEnhanced_ApAT"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_rWX7",docsWrapper:"docsWrapper_n3t2"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(195);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},195:(e,t,n)=>{n.d(t,{Z:()=>l});n(5271);var a=n(4814),o=n(2922),i=n(3221),s=n(2676);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.fff35d7b.js b/assets/js/a94703ab.fff35d7b.js new file mode 100644 index 000000000..8ffb322f8 --- /dev/null +++ b/assets/js/a94703ab.fff35d7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9048],{4590:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(758),o=n(3526),i=n(5003),s=n(8539),l=n(1614),r=n(3139),c=n(8072),d=n(372),u=n(3354);const m={backToTopButton:"backToTopButton_YGZV",backToTopButtonShow:"backToTopButtonShow_UULB"};var b=n(6070);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.gk)();return(0,d.Mq)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a {e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(769),x=n(5557),f=n(7569),j=n(9618),_=n(31);function g(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_yCAH",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_gJMs"};function A(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(g,{className:v.collapseSidebarButtonIcon})})}var C=n(5309),k=n(7888);const S=Symbol("EmptyContext"),T=a.createContext(S);function I(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(T.Provider,{value:i,children:t})}var N=n(5186),B=n(1197),y=n(88),w=n(5473);function L(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function E(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.p)(),_=function(e){const t=(0,w.A)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.Nr)(e):void 0),[e,t])}(t),g=(0,l.w8)(t,i),v=(0,B.ys)(x,i),{collapsed:A,setCollapsed:C}=(0,N.u)({initialState:()=>!!h&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:E}=function(){const e=(0,a.useContext)(T);if(e===S)throw new k.dV("DocSidebarItemsExpandedStateProvider");return e}(),M=function(e){void 0===e&&(e=!A),E(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,k.ZC)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:g,collapsed:A,updateCollapsed:M}),(0,a.useEffect)((()=>{h&&null!=I&&I!==c&&f&&C(!0)}),[h,I,c,C,f]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":A},p),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(y.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":g}),onClick:h?e=>{n?.(t),x?M(!1):(e.preventDefault(),M())}:()=>{n?.(t)},"aria-current":v?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!A:void 0,href:h?_??"#":_,...d,children:m}),x&&h&&(0,b.jsx)(L,{collapsed:A,categoryLabel:m,onClick:e=>{e.preventDefault(),M()}})]}),(0,b.jsx)(N.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:A,children:(0,b.jsx)(V,{items:u,tabIndex:A?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var M=n(2048),H=n(4799);const G={menuExternalLink:"menuExternalLink_sjV1"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l.w8)(t,a),x=(0,M.A)(d);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(y.A,{className:(0,o.A)("menu__link",!x&&G.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.A,{})]})},u)}const P={menuHtmlItem:"menuHtmlItem_UfCu"};function W(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(n),l&&[P.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function D(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(E,{item:t,...n});case"html":return(0,b.jsx)(W,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function U(e){let{items:t,...n}=e;const a=(0,l.Y)(t,n.activePath);return(0,b.jsx)(I,{children:a.map(((e,t)=>(0,b.jsx)(D,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(U),F={menu:"menu_Mtze",menuWithAnnouncementBar:"menuWithAnnouncementBar_R37n"};function z(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.M)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",F.menu,l&&F.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_Xzp7",Z="sidebarWithHideableNavbar_Rm_Q",Q="sidebarHidden_JKMG",X="sidebarLogo_DUBQ";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(Y,s&&Z,i&&Q),children:[s&&(0,b.jsx)(_.A,{tabIndex:-1,className:X}),(0,b.jsx)(z,{path:t,sidebar:n}),l&&(0,b.jsx)(A,{onClick:a})]})}const J=a.memo(q);var K=n(5508),O=n(8260);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,O.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(K.GX,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_jrzn",expandButtonIcon:"expandButtonIcon_gDgF"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(g,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_ZiXa",docSidebarContainerHidden:"docSidebarContainerHidden_QvwP",sidebarViewport:"sidebarViewport_A9_Z"};function se(e){let{children:t}=e;const n=(0,r.t)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.A)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer__kDR",docMainContainerEnhanced:"docMainContainerEnhanced_Fp9U",docItemWrapperEnhanced:"docItemWrapperEnhanced_kVnM"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.t)();return(0,b.jsx)("main",{className:(0,o.A)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_c4xT",docsWrapper:"docsWrapper_sIP3"};function ue(e){let{children:t}=e;const n=(0,r.t)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(2581);function be(e){const t=(0,l.B5)(e);if(!t)return(0,b.jsx)(me.A,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(r.V,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},2581:(e,t,n)=>{n.d(t,{A:()=>l});n(758);var a=n(3526),o=n(8072),i=n(8038),s=n(6070);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/ab6782ba.45f5ab35.js b/assets/js/ab6782ba.54fe4fe4.js similarity index 83% rename from assets/js/ab6782ba.45f5ab35.js rename to assets/js/ab6782ba.54fe4fe4.js index 25819df5d..8f8415c87 100644 --- a/assets/js/ab6782ba.45f5ab35.js +++ b/assets/js/ab6782ba.54fe4fe4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6003],{3306:a=>{a.exports=JSON.parse('{"tag":{"label":"Steam","permalink":"/blog/tags/steam","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/steam","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4146],{9535:a=>{a.exports=JSON.parse('{"tag":{"label":"Steam","permalink":"/blog/tags/steam","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/steam","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/aba21aa0.f1ffa9ac.js b/assets/js/aba21aa0.ce524908.js similarity index 66% rename from assets/js/aba21aa0.f1ffa9ac.js rename to assets/js/aba21aa0.ce524908.js index 1523fcba1..9ec21f383 100644 --- a/assets/js/aba21aa0.f1ffa9ac.js +++ b/assets/js/aba21aa0.ce524908.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3629],{1765:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5742],{7093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/acecf23e.55a1a4b9.js b/assets/js/acecf23e.dbb40a62.js similarity index 69% rename from assets/js/acecf23e.55a1a4b9.js rename to assets/js/acecf23e.dbb40a62.js index 523804a52..21b8f9170 100644 --- a/assets/js/acecf23e.55a1a4b9.js +++ b/assets/js/acecf23e.dbb40a62.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7393],{1838:s=>{s.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog","authorsListPath":"/blog/authors"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1903],{1912:s=>{s.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog","authorsListPath":"/blog/authors"}')}}]); \ No newline at end of file diff --git a/assets/js/aeb57253.2a2f6685.js b/assets/js/aeb57253.2a2f6685.js deleted file mode 100644 index a63592763..000000000 --- a/assets/js/aeb57253.2a2f6685.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5447],{4733:e=>{e.exports=JSON.parse('{"tag":{"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/surge-of-new-users","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/aeb57253.4e489080.js b/assets/js/aeb57253.4e489080.js new file mode 100644 index 000000000..bace2413b --- /dev/null +++ b/assets/js/aeb57253.4e489080.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[885],{9253:e=>{e.exports=JSON.parse('{"tag":{"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/surge-of-new-users","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/b1d7f5b9.cbac1d1d.js b/assets/js/b1d7f5b9.cbac1d1d.js new file mode 100644 index 000000000..e4dd17035 --- /dev/null +++ b/assets/js/b1d7f5b9.cbac1d1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1387],{9091:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>o});const a=JSON.parse('{"id":"server-docs/indexing","title":"Game Indexing","description":"The server watches the files directory (by default /files) and creates an index of all games, when changes occur. The indexing can also be triggered via API.","source":"@site/docs/server-docs/indexing.md","sourceDirName":"server-docs","slug":"/server-docs/indexing","permalink":"/docs/server-docs/indexing","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/indexing.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":7,"frontMatter":{"sidebar_position":7},"sidebar":"docs","previous":{"title":"User Management","permalink":"/docs/server-docs/user-management"},"next":{"title":"Enriching your Games with Metadata","permalink":"/docs/server-docs/metadata-enrichment/metadata"}}');var n=s(6070),i=s(8591);const r={sidebar_position:7},d="Game Indexing",c={},o=[];function l(e){const t={code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"game-indexing",children:"Game Indexing"})}),"\n",(0,n.jsxs)(t.p,{children:["The server watches the files directory (by default ",(0,n.jsx)(t.code,{children:"/files"}),") and creates an index of all games, when changes occur. The indexing can also be triggered via API."]}),"\n",(0,n.jsx)(t.p,{children:"The indexing algorithm follows these steps:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"It recursively scans all game files for changes in the files directory."}),"\n",(0,n.jsxs)(t.li,{children:["For each changed game file:","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"It checks if the exact same game already exists in the database, either based on the file path or a combination of the title and release year. If it does, the game is skipped, as it is already indexed."}),"\n",(0,n.jsx)(t.li,{children:"It checks if the game exists in the database but was previously deleted, again based on the file path or a combination of the title and release year. If so, it restores the game and updates its information with the current file's details, such as size, title, year, early access flag, path, and version."}),"\n",(0,n.jsx)(t.li,{children:"It checks if the game already exists in the database. If so, it updates the game's information with the current file's details. Such as version, game-type or early-access flag."}),"\n",(0,n.jsx)(t.li,{children:"If the game does not exist in the database at all, it indexes the game."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"Finally, a simple integrity check is performed to ensure that the games in the database also exist in the files directory, and vice versa."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8591:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>d});var a=s(758);const n={},i=a.createContext(n);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b1d7f5b9.e4770812.js b/assets/js/b1d7f5b9.e4770812.js deleted file mode 100644 index ab0d59119..000000000 --- a/assets/js/b1d7f5b9.e4770812.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4039],{9490:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>o});var a=s(2676),n=s(8358);const i={sidebar_position:7},r="Game Indexing",d={id:"server-docs/indexing",title:"Game Indexing",description:"The server watches the files directory (by default /files) and creates an index of all games, when changes occur. The indexing can also be triggered via API.",source:"@site/docs/server-docs/indexing.md",sourceDirName:"server-docs",slug:"/server-docs/indexing",permalink:"/docs/server-docs/indexing",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/indexing.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"docs",previous:{title:"User Management",permalink:"/docs/server-docs/user-management"},next:{title:"Enriching your Games with Metadata",permalink:"/docs/server-docs/metadata-enrichment/metadata"}},c={},o=[];function l(e){const t={code:"code",h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"game-indexing",children:"Game Indexing"})}),"\n",(0,a.jsxs)(t.p,{children:["The server watches the files directory (by default ",(0,a.jsx)(t.code,{children:"/files"}),") and creates an index of all games, when changes occur. The indexing can also be triggered via API."]}),"\n",(0,a.jsx)(t.p,{children:"The indexing algorithm follows these steps:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"It recursively scans all game files for changes in the files directory."}),"\n",(0,a.jsxs)(t.li,{children:["For each changed game file:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"It checks if the exact same game already exists in the database, either based on the file path or a combination of the title and release year. If it does, the game is skipped, as it is already indexed."}),"\n",(0,a.jsx)(t.li,{children:"It checks if the game exists in the database but was previously deleted, again based on the file path or a combination of the title and release year. If so, it restores the game and updates its information with the current file's details, such as size, title, year, early access flag, path, and version."}),"\n",(0,a.jsx)(t.li,{children:"It checks if the game already exists in the database. If so, it updates the game's information with the current file's details. Such as version, game-type or early-access flag."}),"\n",(0,a.jsx)(t.li,{children:"If the game does not exist in the database at all, it indexes the game."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Finally, a simple integrity check is performed to ensure that the games in the database also exist in the files directory, and vice versa."})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},8358:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>r});var a=s(5271);const n={},i=a.createContext(n);function r(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b28c3188.709befc6.js b/assets/js/b28c3188.709befc6.js new file mode 100644 index 000000000..781064b23 --- /dev/null +++ b/assets/js/b28c3188.709befc6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3468],{6266:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>l,contentTitle:()=>c,default:()=>x,frontMatter:()=>t,metadata:()=>r,toc:()=>h});const r=JSON.parse('{"id":"server-docs/configuration","title":"Configuration","description":"Check out configuration.ts for all possible environment variables in case we forgot to update this page.","source":"@site/docs/server-docs/configuration.md","sourceDirName":"server-docs","slug":"/server-docs/configuration","permalink":"/docs/server-docs/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/configuration.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docs","previous":{"title":"Using Native Approach","permalink":"/docs/server-docs/setup/native"},"next":{"title":"File and Folder Structure","permalink":"/docs/server-docs/structure"}}');var i=s(6070),n=s(8591);const t={sidebar_position:2},c="Configuration",l={},h=[{value:"Configuration Properties",id:"configuration-properties",level:2},{value:"SERVER",id:"server",level:2},{value:"VOLUMES",id:"volumes",level:2},{value:"DB",id:"db",level:2},{value:"USERS",id:"users",level:2},{value:"PARENTAL",id:"parental",level:2},{value:"GAMES",id:"games",level:2},{value:"MEDIA",id:"media",level:2},{value:"METADATA",id:"metadata",level:2},{value:"TESTING",id:"testing",level:2}];function o(e){const d={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(d.header,{children:(0,i.jsx)(d.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,i.jsx)(d.admonition,{type:"tip",children:(0,i.jsxs)(d.p,{children:["Check out ",(0,i.jsx)(d.a,{href:"https://github.com/Phalcode/gamevault-backend/blob/master/src/configuration.ts",children:"configuration.ts"})," for all possible environment variables in case we forgot to update this page."]})}),"\n",(0,i.jsx)(d.p,{children:"All configuration properties of your GameVault server are passed as environment variables or via a .env file. The following tables describe the available properties, their default values, explanations, and possible values."}),"\n",(0,i.jsx)(d.h2,{id:"configuration-properties",children:"Configuration Properties"}),"\n",(0,i.jsxs)(d.p,{children:["This page describes the various configuration properties used in the application. These properties can be configured in the environment variables or in a ",(0,i.jsx)(d.code,{children:".env"})," file."]}),"\n",(0,i.jsx)(d.h2,{id:"server",children:"SERVER"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"PUID"})}),(0,i.jsx)(d.td,{children:"The User-Identifer that should be used."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"1000"})}),(0,i.jsx)(d.td,{children:"Any user id (number)"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"PGID"})}),(0,i.jsx)(d.td,{children:"The Group-Identifer that should be used."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"1000"})}),(0,i.jsx)(d.td,{children:"Any group id (number)"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_PORT"})}),(0,i.jsx)(d.td,{children:"The port the server should use. (Only relevant if the server is run without docker on bare metal.)"}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"8080"})}),(0,i.jsx)(d.td,{children:"Any non-reserved free port (1024 to 49151)"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_LOG_LEVEL"})}),(0,i.jsx)(d.td,{children:"The log level of the server."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"info"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"debug"}),", ",(0,i.jsx)(d.code,{children:"info"}),", ",(0,i.jsx)(d.code,{children:"warn"}),", ",(0,i.jsx)(d.code,{children:"error"}),", ",(0,i.jsx)(d.code,{children:"fatal"}),", ",(0,i.jsx)(d.code,{children:"off"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_LOG_FILES_ENABLED"})}),(0,i.jsxs)(d.td,{children:["If the server should also write the logs to the ",(0,i.jsx)(d.code,{children:"VOLUMES_LOGS"})," directory via rolling file logger."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"true"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_REQUEST_LOG_FORMAT"})}),(0,i.jsxs)(d.td,{children:["The ",(0,i.jsx)(d.a,{href:"https://www.npmjs.com/package/morgan#predefined-formats",children:"morgan log format"})," for incoming HTTP Requests"]}),(0,i.jsx)(d.td,{children:"Custom Log Format"}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"short"}),", ",(0,i.jsx)(d.code,{children:"combined"})," ",(0,i.jsx)(d.a,{href:"https://www.npmjs.com/package/morgan#predefined-formats",children:"and many more"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_CORS_ALLOWED_ORIGINS"})}),(0,i.jsx)(d.td,{children:"Allowed CORS origins for the server."}),(0,i.jsx)(d.td,{children:"All Origins"}),(0,i.jsx)(d.td,{children:"A comma-separated list of origins"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_REGISTRATION_DISABLED"})}),(0,i.jsx)(d.td,{children:"If registration is enabled or not."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_ACCOUNT_ACTIVATION_DISABLED"})}),(0,i.jsx)(d.td,{children:"If accounts need to be activated by an admin before using them."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_ADMIN_USERNAME"})}),(0,i.jsxs)(d.td,{children:["Used for role recovery of existing users. The Server grants Admin Role to an existing User with this Username on register or startup. ",(0,i.jsx)(d.strong,{children:"\u26a0\ufe0f This won't register a new account!"})]}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Any username"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_ADMIN_PASSWORD"})}),(0,i.jsxs)(d.td,{children:["Used for password recovery of existing users. Resets the password of the existing user with the username set in ",(0,i.jsx)(d.code,{children:"SERVER_ADMIN_USERNAME"})," to this password on startup. ",(0,i.jsx)(d.strong,{children:"\u26a0\ufe0f This won't register a new account!"})]}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Any password (No Length Validation)"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_API_DOCS_ENABLED"})}),(0,i.jsxs)(d.td,{children:["Enables the API Documentation on ",(0,i.jsx)(d.code,{children:"/api/docs"}),", ",(0,i.jsx)(d.code,{children:"/api/docs-json"})," & ",(0,i.jsx)(d.code,{children:"/api/docs/yaml"}),"."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_MAX_DOWNLOAD_BANDWIDTH_IN_KBPS"})}),(0,i.jsx)(d.td,{children:"Maximum bandwidth for downloads on this server in KB/s."}),(0,i.jsx)(d.td,{children:"- (Unlimited)"}),(0,i.jsx)(d.td,{children:"Any Number"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_ONLINE_ACTIVITIES_DISABLED"})}),(0,i.jsx)(d.td,{children:'Whether or not the server should listen to online activities like "ONLINE", "BUSY", "PLAYING" etc. If this is set to true, all users will always be shown as offline.'}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"SERVER_STACK_TRACE_LIMIT"})}),(0,i.jsx)(d.td,{children:"Configures the maximum number of stack frames to display in error stack traces, with a higher value providing more detailed debugging information."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"10"})}),(0,i.jsx)(d.td,{children:"Any Number"})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"volumes",children:"VOLUMES"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"VOLUMES_CONFIG"})}),(0,i.jsx)(d.td,{children:"Folder inside container used for configuring GameVault."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"/config"})}),(0,i.jsx)(d.td,{children:"Any valid folder path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"VOLUMES_FILES"})}),(0,i.jsx)(d.td,{children:"Folder inside container used for game files."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"/files"})}),(0,i.jsx)(d.td,{children:"Any valid folder path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"VOLUMES_MEDIA"})}),(0,i.jsx)(d.td,{children:"Folder inside container used for media."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"/media"})}),(0,i.jsx)(d.td,{children:"Any valid folder path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"VOLUMES_LOGS"})}),(0,i.jsx)(d.td,{children:"Folder inside container used for logs."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"/logs"})}),(0,i.jsx)(d.td,{children:"Any valid folder path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"VOLUMES_SQLITEDB"})}),(0,i.jsxs)(d.td,{children:["Folder inside container used for ",(0,i.jsx)(d.code,{children:"SQLITE"})," database. (Not needed if ",(0,i.jsx)(d.code,{children:"DB_SYSTEM"})," is set to ",(0,i.jsx)(d.code,{children:"POSTGRESQL"}),")"]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"/db"})}),(0,i.jsx)(d.td,{children:"Any valid folder path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"VOLUMES_PLUGINS"})}),(0,i.jsx)(d.td,{children:"Folder inside container used for plugins."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"/plugins"})}),(0,i.jsx)(d.td,{children:"Any valid folder path"})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"db",children:"DB"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_SYSTEM"})}),(0,i.jsx)(d.td,{children:"The database system used (POSTGRESQL or SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"POSTGRESQL"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"POSTGRESQL"}),", ",(0,i.jsx)(d.code,{children:"SQLITE"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_HOST"})}),(0,i.jsx)(d.td,{children:"The host of the database (not needed for SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"localhost"})}),(0,i.jsx)(d.td,{children:"Any valid host name"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_PORT"})}),(0,i.jsx)(d.td,{children:"The port of the database (not needed for SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"5432"})}),(0,i.jsx)(d.td,{children:"Any valid port number"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_USERNAME"})}),(0,i.jsx)(d.td,{children:"The username for the database (not needed for SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"default"})}),(0,i.jsx)(d.td,{children:"Any valid username"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_PASSWORD"})}),(0,i.jsx)(d.td,{children:"The password for the database (not needed for SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"default"})}),(0,i.jsx)(d.td,{children:"Any valid password"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_DATABASE"})}),(0,i.jsx)(d.td,{children:"The database name (not needed for SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"gamevault"})}),(0,i.jsx)(d.td,{children:"Any valid database name"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_DEBUG"})}),(0,i.jsx)(d.td,{children:"Log all SQL Statements sent to the database."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_SYNCHRONIZE"})}),(0,i.jsx)(d.td,{children:"Force synchronizes the database with the entities. (This could break your database!)"}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_TLS_ENABLED"})}),(0,i.jsx)(d.td,{children:"Enables TLS for the database. (not needed for SQLITE)."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_TLS_REJECT_UNAUTHORIZED_ENABLED"})}),(0,i.jsx)(d.td,{children:"Whether the database will reject TLS connections that do not present a valid, trusted certificate."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_TLS_KEY_PATH"})}),(0,i.jsx)(d.td,{children:"The file path to the private key used for securing TLS connections to the database."}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Any file path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_TLS_CERTIFICATE_PATH"})}),(0,i.jsx)(d.td,{children:"The file path to the TLS certificate used for authenticating the database server."}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Any file path"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"DB_TLS_CA_CERTIFICATE_PATH"})}),(0,i.jsx)(d.td,{children:"The file path to the CA certificate used for verifying client certificates in TLS connections."}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Any file path"})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"users",children:"USERS"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"USERS_REQUIRE_EMAIL"})}),(0,i.jsxs)(d.td,{children:["Require ",(0,i.jsx)(d.strong,{children:"Email"})," for new registrations."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"USERS_REQUIRE_FIRST_NAME"})}),(0,i.jsxs)(d.td,{children:["Require ",(0,i.jsx)(d.strong,{children:"First Name"})," for new registrations."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"USERS_REQUIRE_LAST_NAME"})}),(0,i.jsxs)(d.td,{children:["Require ",(0,i.jsx)(d.strong,{children:"Last Name"})," for new registrations."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"USERS_REQUIRE_BIRTH_DATE"})}),(0,i.jsxs)(d.td,{children:["Require ",(0,i.jsx)(d.strong,{children:"Birth Date"})," for new registrations. (",(0,i.jsxs)(d.strong,{children:["Automatically set to ",(0,i.jsx)(d.code,{children:"true"})," when ",(0,i.jsx)(d.code,{children:"PARENTAL_AGE_RESTRICTION_ENABLED"})," is true"]}),")"]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"parental",children:"PARENTAL"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"PARENTAL_AGE_RESTRICTION_ENABLED"})}),(0,i.jsx)(d.td,{children:"Determines whether age-based parental restrictions are enforced."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"PARENTAL_AGE_OF_MAJORITY"})}),(0,i.jsx)(d.td,{children:"The age at which an individual is legally recognized as an adult for parental restrictions."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"18"})}),(0,i.jsx)(d.td,{children:"Any number"})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"games",children:"GAMES"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"GAMES_INDEX_INTERVAL_IN_MINUTES"})}),(0,i.jsx)(d.td,{children:"The index interval, measured in minutes, decides how frequently the server should check for changes in games in the /files directory. This used to be essential before we implemented the filewatcher to the server. Nowadays, it's optional for rare situations where the filewatcher might miss changes. If set to 0, it won't regularly trigger reindexing and solely depend on the filewatcher."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"60"})}),(0,i.jsx)(d.td,{children:"Any number"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"GAMES_SUPPORTED_FILE_FORMATS"})}),(0,i.jsx)(d.td,{children:"Comma-Seperated list of supported file-types GameVault should detect."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.a,{href:"/docs/server-docs/structure#supported-archive-formats",children:"All Supported Formats"})}),(0,i.jsx)(d.td,{children:'".zip,.7z,.rar"'})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"GAMES_SEARCH_RECURSIVE"})}),(0,i.jsx)(d.td,{children:"If indexer should search for games in subfolders."}),(0,i.jsx)(d.td,{children:"true"}),(0,i.jsx)(d.td,{children:'"true", "false'})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"GAMES_DEFAULT_ARCHIVE_PASSWORD"})}),(0,i.jsx)(d.td,{children:"A default password for archives. Useful if you always use the same password for your games and want Game Type Detection to work with the encrypted files. Without this game type detection on encrypted archives depends on the file extension and if the headers are encrypted"}),(0,i.jsx)(d.td,{children:'"Anything"'}),(0,i.jsx)(d.td,{children:"Any string"})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"media",children:"MEDIA"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"MEDIA_MAX_SIZE"})}),(0,i.jsx)(d.td,{children:"The maximum size for media uploads. Set it to 0 to disable media uploads."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"10 mb"})}),(0,i.jsx)(d.td,{children:'e.g. "10 mb", "5 gb", "300 kb"'})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"MEDIA_SUPPORTED_FORMATS"})}),(0,i.jsx)(d.td,{children:"List of supported media formats (MIME Types) on this server, separated by commas."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.a,{href:"/docs/server-docs/media#supported-formats",children:"See here"})}),(0,i.jsx)(d.td,{children:"Comma separated list of MIME Types."})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"MEDIA_GC_DISABLED"})}),(0,i.jsx)(d.td,{children:"Whether or not media garbage collection is enabled. (Deletes unused media)"}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"MEDIA_GC_INTERVAL_IN_MINUTES"})}),(0,i.jsx)(d.td,{children:"The interval in minutes for media garbage collection."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"60"})}),(0,i.jsx)(d.td,{children:"Any number"})]})]})]}),"\n",(0,i.jsx)(d.p,{children:"Here are the descriptions for the metadata properties:"}),"\n",(0,i.jsx)(d.h2,{id:"metadata",children:"METADATA"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"METADATA_TTL_IN_DAYS"})}),(0,i.jsx)(d.td,{children:"The number of days metadata is considered fresh before requiring an update."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"30"})}),(0,i.jsx)(d.td,{children:"Any number of days"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"METADATA_IGDB_ENABLED"})}),(0,i.jsx)(d.td,{children:"Enables or disables the built-in integration with IGDB for metadata retrieval."}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"true"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"METADATA_IGDB_PRIORITY"})}),(0,i.jsx)(d.td,{children:"The priority level for IGDB metadata sources when multiple metadata sources are available."}),(0,i.jsx)(d.td,{children:"1"}),(0,i.jsx)(d.td,{children:"Any number"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"METADATA_IGDB_REQUEST_INTERVAL_MS"})}),(0,i.jsxs)(d.td,{children:["The interval, in milliseconds, to wait between consecutive requests to prevent exceeding rate limits. This delay will be applied ",(0,i.jsx)(d.strong,{children:"before"})," each call to the provider."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"250"})}),(0,i.jsx)(d.td,{children:"Any number"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"METADATA_IGDB_CLIENT_ID"})}),(0,i.jsx)(d.td,{children:"The Client-ID used for authenticating requests to the IGDB API."}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Your Client ID"})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"METADATA_IGDB_CLIENT_SECRET"})}),(0,i.jsx)(d.td,{children:"The Client-Secret used for authenticating requests to the IGDB API."}),(0,i.jsx)(d.td,{children:"-"}),(0,i.jsx)(d.td,{children:"Your Client Secret"})]})]})]}),"\n",(0,i.jsx)(d.h2,{id:"testing",children:"TESTING"}),"\n",(0,i.jsxs)(d.table,{children:[(0,i.jsx)(d.thead,{children:(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.th,{children:"Property"}),(0,i.jsx)(d.th,{children:"Description"}),(0,i.jsx)(d.th,{children:"Default"}),(0,i.jsx)(d.th,{children:"Possible Values"})]})}),(0,i.jsxs)(d.tbody,{children:[(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"TESTING_AUTHENTICATION_DISABLED"})}),(0,i.jsxs)(d.td,{children:["If ",(0,i.jsx)(d.code,{children:"true"}),", the API will accept any auth header. Useful for testing without authentication."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"TESTING_MOCK_FILES"})}),(0,i.jsxs)(d.td,{children:["If ",(0,i.jsx)(d.code,{children:"true"}),", the server will mock all files or ignore filesystem functionalities. Useful for testing without real files."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"TESTING_IN_MEMORY_DB"})}),(0,i.jsxs)(d.td,{children:["If ",(0,i.jsx)(d.code,{children:"true"}),", the server will use an in-memory database. Useful for testing without creating an actual database. Only works with SQLITE."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]}),(0,i.jsxs)(d.tr,{children:[(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"TESTING_MOCK_PROVIDERS"})}),(0,i.jsxs)(d.td,{children:["If ",(0,i.jsx)(d.code,{children:"true"}),", the server will create two mock providers. (-9999 and 9999 Priority) Useful for testing metadata-merges."]}),(0,i.jsx)(d.td,{children:(0,i.jsx)(d.code,{children:"false"})}),(0,i.jsxs)(d.td,{children:[(0,i.jsx)(d.code,{children:"true"}),", ",(0,i.jsx)(d.code,{children:"false"})]})]})]})]})]})}function x(e={}){const{wrapper:d}={...(0,n.R)(),...e.components};return d?(0,i.jsx)(d,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8591:(e,d,s)=>{s.d(d,{R:()=>t,x:()=>c});var r=s(758);const i={},n=r.createContext(i);function t(e){const d=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),r.createElement(n.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b28c3188.de9c75ef.js b/assets/js/b28c3188.de9c75ef.js deleted file mode 100644 index 7ef8ff8f2..000000000 --- a/assets/js/b28c3188.de9c75ef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3559],{1234:(e,d,s)=>{s.r(d),s.d(d,{assets:()=>l,contentTitle:()=>t,default:()=>x,frontMatter:()=>n,metadata:()=>c,toc:()=>h});var r=s(2676),i=s(8358);const n={sidebar_position:2},t="Configuration",c={id:"server-docs/configuration",title:"Configuration",description:"Check out configuration.ts for all possible environment variables in case we forgot to update this page.",source:"@site/docs/server-docs/configuration.md",sourceDirName:"server-docs",slug:"/server-docs/configuration",permalink:"/docs/server-docs/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/configuration.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docs",previous:{title:"Using Native Approach",permalink:"/docs/server-docs/setup/native"},next:{title:"File and Folder Structure",permalink:"/docs/server-docs/structure"}},l={},h=[{value:"Configuration Properties",id:"configuration-properties",level:2},{value:"SERVER",id:"server",level:2},{value:"VOLUMES",id:"volumes",level:2},{value:"DB",id:"db",level:2},{value:"USERS",id:"users",level:2},{value:"PARENTAL",id:"parental",level:2},{value:"GAMES",id:"games",level:2},{value:"MEDIA",id:"media",level:2},{value:"METADATA",id:"metadata",level:2},{value:"TESTING",id:"testing",level:2}];function o(e){const d={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.header,{children:(0,r.jsx)(d.h1,{id:"configuration",children:"Configuration"})}),"\n",(0,r.jsx)(d.admonition,{type:"tip",children:(0,r.jsxs)(d.p,{children:["Check out ",(0,r.jsx)(d.a,{href:"https://github.com/Phalcode/gamevault-backend/blob/master/src/configuration.ts",children:"configuration.ts"})," for all possible environment variables in case we forgot to update this page."]})}),"\n",(0,r.jsx)(d.p,{children:"All configuration properties of your GameVault server are passed as environment variables or via a .env file. The following tables describe the available properties, their default values, explanations, and possible values."}),"\n",(0,r.jsx)(d.h2,{id:"configuration-properties",children:"Configuration Properties"}),"\n",(0,r.jsxs)(d.p,{children:["This page describes the various configuration properties used in the application. These properties can be configured in the environment variables or in a ",(0,r.jsx)(d.code,{children:".env"})," file."]}),"\n",(0,r.jsx)(d.h2,{id:"server",children:"SERVER"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"PUID"})}),(0,r.jsx)(d.td,{children:"The User-Identifer that should be used."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"1000"})}),(0,r.jsx)(d.td,{children:"Any user id (number)"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"PGID"})}),(0,r.jsx)(d.td,{children:"The Group-Identifer that should be used."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"1000"})}),(0,r.jsx)(d.td,{children:"Any group id (number)"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_PORT"})}),(0,r.jsx)(d.td,{children:"The port the server should use. (Only relevant if the server is run without docker on bare metal.)"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"8080"})}),(0,r.jsx)(d.td,{children:"Any non-reserved free port (1024 to 49151)"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_LOG_LEVEL"})}),(0,r.jsx)(d.td,{children:"The log level of the server."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"info"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"debug"}),", ",(0,r.jsx)(d.code,{children:"info"}),", ",(0,r.jsx)(d.code,{children:"warn"}),", ",(0,r.jsx)(d.code,{children:"error"}),", ",(0,r.jsx)(d.code,{children:"fatal"}),", ",(0,r.jsx)(d.code,{children:"off"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_LOG_FILES_ENABLED"})}),(0,r.jsxs)(d.td,{children:["If the server should also write the logs to the ",(0,r.jsx)(d.code,{children:"VOLUMES_LOGS"})," directory via rolling file logger."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"true"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_REQUEST_LOG_FORMAT"})}),(0,r.jsxs)(d.td,{children:["The ",(0,r.jsx)(d.a,{href:"https://www.npmjs.com/package/morgan#predefined-formats",children:"morgan log format"})," for incoming HTTP Requests"]}),(0,r.jsx)(d.td,{children:"Custom Log Format"}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"short"}),", ",(0,r.jsx)(d.code,{children:"combined"})," ",(0,r.jsx)(d.a,{href:"https://www.npmjs.com/package/morgan#predefined-formats",children:"and many more"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_CORS_ALLOWED_ORIGINS"})}),(0,r.jsx)(d.td,{children:"Allowed CORS origins for the server."}),(0,r.jsx)(d.td,{children:"All Origins"}),(0,r.jsx)(d.td,{children:"A comma-separated list of origins"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_REGISTRATION_DISABLED"})}),(0,r.jsx)(d.td,{children:"If registration is enabled or not."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_ACCOUNT_ACTIVATION_DISABLED"})}),(0,r.jsx)(d.td,{children:"If accounts need to be activated by an admin before using them."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_ADMIN_USERNAME"})}),(0,r.jsxs)(d.td,{children:["Used for role recovery of existing users. The Server grants Admin Role to an existing User with this Username on register or startup. ",(0,r.jsx)(d.strong,{children:"\u26a0\ufe0f This won't register a new account!"})]}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Any username"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_ADMIN_PASSWORD"})}),(0,r.jsxs)(d.td,{children:["Used for password recovery of existing users. Resets the password of the existing user with the username set in ",(0,r.jsx)(d.code,{children:"SERVER_ADMIN_USERNAME"})," to this password on startup. ",(0,r.jsx)(d.strong,{children:"\u26a0\ufe0f This won't register a new account!"})]}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Any password (No Length Validation)"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_API_DOCS_ENABLED"})}),(0,r.jsxs)(d.td,{children:["Enables the API Documentation on ",(0,r.jsx)(d.code,{children:"/api/docs"}),", ",(0,r.jsx)(d.code,{children:"/api/docs-json"})," & ",(0,r.jsx)(d.code,{children:"/api/docs/yaml"}),"."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_MAX_DOWNLOAD_BANDWIDTH_IN_KBPS"})}),(0,r.jsx)(d.td,{children:"Maximum bandwidth for downloads on this server in KB/s."}),(0,r.jsx)(d.td,{children:"- (Unlimited)"}),(0,r.jsx)(d.td,{children:"Any Number"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_ONLINE_ACTIVITIES_DISABLED"})}),(0,r.jsx)(d.td,{children:'Whether or not the server should listen to online activities like "ONLINE", "BUSY", "PLAYING" etc. If this is set to true, all users will always be shown as offline.'}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"SERVER_STACK_TRACE_LIMIT"})}),(0,r.jsx)(d.td,{children:"Configures the maximum number of stack frames to display in error stack traces, with a higher value providing more detailed debugging information."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"10"})}),(0,r.jsx)(d.td,{children:"Any Number"})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"volumes",children:"VOLUMES"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"VOLUMES_CONFIG"})}),(0,r.jsx)(d.td,{children:"Folder inside container used for configuring GameVault."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/config"})}),(0,r.jsx)(d.td,{children:"Any valid folder path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"VOLUMES_FILES"})}),(0,r.jsx)(d.td,{children:"Folder inside container used for game files."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/files"})}),(0,r.jsx)(d.td,{children:"Any valid folder path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"VOLUMES_MEDIA"})}),(0,r.jsx)(d.td,{children:"Folder inside container used for media."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/media"})}),(0,r.jsx)(d.td,{children:"Any valid folder path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"VOLUMES_LOGS"})}),(0,r.jsx)(d.td,{children:"Folder inside container used for logs."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/logs"})}),(0,r.jsx)(d.td,{children:"Any valid folder path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"VOLUMES_SQLITEDB"})}),(0,r.jsxs)(d.td,{children:["Folder inside container used for ",(0,r.jsx)(d.code,{children:"SQLITE"})," database. (Not needed if ",(0,r.jsx)(d.code,{children:"DB_SYSTEM"})," is set to ",(0,r.jsx)(d.code,{children:"POSTGRESQL"}),")"]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/db"})}),(0,r.jsx)(d.td,{children:"Any valid folder path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"VOLUMES_PLUGINS"})}),(0,r.jsx)(d.td,{children:"Folder inside container used for plugins."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"/plugins"})}),(0,r.jsx)(d.td,{children:"Any valid folder path"})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"db",children:"DB"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_SYSTEM"})}),(0,r.jsx)(d.td,{children:"The database system used (POSTGRESQL or SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"POSTGRESQL"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"POSTGRESQL"}),", ",(0,r.jsx)(d.code,{children:"SQLITE"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_HOST"})}),(0,r.jsx)(d.td,{children:"The host of the database (not needed for SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"localhost"})}),(0,r.jsx)(d.td,{children:"Any valid host name"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_PORT"})}),(0,r.jsx)(d.td,{children:"The port of the database (not needed for SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"5432"})}),(0,r.jsx)(d.td,{children:"Any valid port number"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_USERNAME"})}),(0,r.jsx)(d.td,{children:"The username for the database (not needed for SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"default"})}),(0,r.jsx)(d.td,{children:"Any valid username"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_PASSWORD"})}),(0,r.jsx)(d.td,{children:"The password for the database (not needed for SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"default"})}),(0,r.jsx)(d.td,{children:"Any valid password"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_DATABASE"})}),(0,r.jsx)(d.td,{children:"The database name (not needed for SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"gamevault"})}),(0,r.jsx)(d.td,{children:"Any valid database name"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_DEBUG"})}),(0,r.jsx)(d.td,{children:"Log all SQL Statements sent to the database."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_SYNCHRONIZE"})}),(0,r.jsx)(d.td,{children:"Force synchronizes the database with the entities. (This could break your database!)"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_TLS_ENABLED"})}),(0,r.jsx)(d.td,{children:"Enables TLS for the database. (not needed for SQLITE)."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_TLS_REJECT_UNAUTHORIZED_ENABLED"})}),(0,r.jsx)(d.td,{children:"Whether the database will reject TLS connections that do not present a valid, trusted certificate."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_TLS_KEY_PATH"})}),(0,r.jsx)(d.td,{children:"The file path to the private key used for securing TLS connections to the database."}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Any file path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_TLS_CERTIFICATE_PATH"})}),(0,r.jsx)(d.td,{children:"The file path to the TLS certificate used for authenticating the database server."}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Any file path"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"DB_TLS_CA_CERTIFICATE_PATH"})}),(0,r.jsx)(d.td,{children:"The file path to the CA certificate used for verifying client certificates in TLS connections."}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Any file path"})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"users",children:"USERS"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"USERS_REQUIRE_EMAIL"})}),(0,r.jsxs)(d.td,{children:["Require ",(0,r.jsx)(d.strong,{children:"Email"})," for new registrations."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"USERS_REQUIRE_FIRST_NAME"})}),(0,r.jsxs)(d.td,{children:["Require ",(0,r.jsx)(d.strong,{children:"First Name"})," for new registrations."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"USERS_REQUIRE_LAST_NAME"})}),(0,r.jsxs)(d.td,{children:["Require ",(0,r.jsx)(d.strong,{children:"Last Name"})," for new registrations."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"USERS_REQUIRE_BIRTH_DATE"})}),(0,r.jsxs)(d.td,{children:["Require ",(0,r.jsx)(d.strong,{children:"Birth Date"})," for new registrations. (",(0,r.jsxs)(d.strong,{children:["Automatically set to ",(0,r.jsx)(d.code,{children:"true"})," when ",(0,r.jsx)(d.code,{children:"PARENTAL_AGE_RESTRICTION_ENABLED"})," is true"]}),")"]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"parental",children:"PARENTAL"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"PARENTAL_AGE_RESTRICTION_ENABLED"})}),(0,r.jsx)(d.td,{children:"Determines whether age-based parental restrictions are enforced."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"PARENTAL_AGE_OF_MAJORITY"})}),(0,r.jsx)(d.td,{children:"The age at which an individual is legally recognized as an adult for parental restrictions."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"18"})}),(0,r.jsx)(d.td,{children:"Any number"})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"games",children:"GAMES"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"GAMES_INDEX_INTERVAL_IN_MINUTES"})}),(0,r.jsx)(d.td,{children:"The index interval, measured in minutes, decides how frequently the server should check for changes in games in the /files directory. This used to be essential before we implemented the filewatcher to the server. Nowadays, it's optional for rare situations where the filewatcher might miss changes. If set to 0, it won't regularly trigger reindexing and solely depend on the filewatcher."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"60"})}),(0,r.jsx)(d.td,{children:"Any number"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"GAMES_SUPPORTED_FILE_FORMATS"})}),(0,r.jsx)(d.td,{children:"Comma-Seperated list of supported file-types GameVault should detect."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"/docs/server-docs/structure#supported-archive-formats",children:"All Supported Formats"})}),(0,r.jsx)(d.td,{children:'".zip,.7z,.rar"'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"GAMES_SEARCH_RECURSIVE"})}),(0,r.jsx)(d.td,{children:"If indexer should search for games in subfolders."}),(0,r.jsx)(d.td,{children:"true"}),(0,r.jsx)(d.td,{children:'"true", "false'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"GAMES_DEFAULT_ARCHIVE_PASSWORD"})}),(0,r.jsx)(d.td,{children:"A default password for archives. Useful if you always use the same password for your games and want Game Type Detection to work with the encrypted files. Without this game type detection on encrypted archives depends on the file extension and if the headers are encrypted"}),(0,r.jsx)(d.td,{children:'"Anything"'}),(0,r.jsx)(d.td,{children:"Any string"})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"media",children:"MEDIA"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"MEDIA_MAX_SIZE"})}),(0,r.jsx)(d.td,{children:"The maximum size for media uploads. Set it to 0 to disable media uploads."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"10 mb"})}),(0,r.jsx)(d.td,{children:'e.g. "10 mb", "5 gb", "300 kb"'})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"MEDIA_SUPPORTED_FORMATS"})}),(0,r.jsx)(d.td,{children:"List of supported media formats (MIME Types) on this server, separated by commas."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.a,{href:"/docs/server-docs/media#supported-formats",children:"See here"})}),(0,r.jsx)(d.td,{children:"Comma separated list of MIME Types."})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"MEDIA_GC_DISABLED"})}),(0,r.jsx)(d.td,{children:"Whether or not media garbage collection is enabled. (Deletes unused media)"}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"MEDIA_GC_INTERVAL_IN_MINUTES"})}),(0,r.jsx)(d.td,{children:"The interval in minutes for media garbage collection."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"60"})}),(0,r.jsx)(d.td,{children:"Any number"})]})]})]}),"\n",(0,r.jsx)(d.p,{children:"Here are the descriptions for the metadata properties:"}),"\n",(0,r.jsx)(d.h2,{id:"metadata",children:"METADATA"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"METADATA_TTL_IN_DAYS"})}),(0,r.jsx)(d.td,{children:"The number of days metadata is considered fresh before requiring an update."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"30"})}),(0,r.jsx)(d.td,{children:"Any number of days"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"METADATA_IGDB_ENABLED"})}),(0,r.jsx)(d.td,{children:"Enables or disables the built-in integration with IGDB for metadata retrieval."}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"true"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"METADATA_IGDB_PRIORITY"})}),(0,r.jsx)(d.td,{children:"The priority level for IGDB metadata sources when multiple metadata sources are available."}),(0,r.jsx)(d.td,{children:"1"}),(0,r.jsx)(d.td,{children:"Any number"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"METADATA_IGDB_REQUEST_INTERVAL_MS"})}),(0,r.jsxs)(d.td,{children:["The interval, in milliseconds, to wait between consecutive requests to prevent exceeding rate limits. This delay will be applied ",(0,r.jsx)(d.strong,{children:"before"})," each call to the provider."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"250"})}),(0,r.jsx)(d.td,{children:"Any number"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"METADATA_IGDB_CLIENT_ID"})}),(0,r.jsx)(d.td,{children:"The Client-ID used for authenticating requests to the IGDB API."}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Your Client ID"})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"METADATA_IGDB_CLIENT_SECRET"})}),(0,r.jsx)(d.td,{children:"The Client-Secret used for authenticating requests to the IGDB API."}),(0,r.jsx)(d.td,{children:"-"}),(0,r.jsx)(d.td,{children:"Your Client Secret"})]})]})]}),"\n",(0,r.jsx)(d.h2,{id:"testing",children:"TESTING"}),"\n",(0,r.jsxs)(d.table,{children:[(0,r.jsx)(d.thead,{children:(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.th,{children:"Property"}),(0,r.jsx)(d.th,{children:"Description"}),(0,r.jsx)(d.th,{children:"Default"}),(0,r.jsx)(d.th,{children:"Possible Values"})]})}),(0,r.jsxs)(d.tbody,{children:[(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"TESTING_AUTHENTICATION_DISABLED"})}),(0,r.jsxs)(d.td,{children:["If ",(0,r.jsx)(d.code,{children:"true"}),", the API will accept any auth header. Useful for testing without authentication."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"TESTING_MOCK_FILES"})}),(0,r.jsxs)(d.td,{children:["If ",(0,r.jsx)(d.code,{children:"true"}),", the server will mock all files or ignore filesystem functionalities. Useful for testing without real files."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"TESTING_IN_MEMORY_DB"})}),(0,r.jsxs)(d.td,{children:["If ",(0,r.jsx)(d.code,{children:"true"}),", the server will use an in-memory database. Useful for testing without creating an actual database. Only works with SQLITE."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]}),(0,r.jsxs)(d.tr,{children:[(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"TESTING_MOCK_PROVIDERS"})}),(0,r.jsxs)(d.td,{children:["If ",(0,r.jsx)(d.code,{children:"true"}),", the server will create two mock providers. (-9999 and 9999 Priority) Useful for testing metadata-merges."]}),(0,r.jsx)(d.td,{children:(0,r.jsx)(d.code,{children:"false"})}),(0,r.jsxs)(d.td,{children:[(0,r.jsx)(d.code,{children:"true"}),", ",(0,r.jsx)(d.code,{children:"false"})]})]})]})]})]})}function x(e={}){const{wrapper:d}={...(0,i.a)(),...e.components};return d?(0,r.jsx)(d,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},8358:(e,d,s)=>{s.d(d,{Z:()=>c,a:()=>t});var r=s(5271);const i={},n=r.createContext(i);function t(e){const d=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(d):{...d,...e}}),[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),r.createElement(n.Provider,{value:d},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f677311a.3b2a60f5.js b/assets/js/b2ade0e8.d7e9a1d9.js similarity index 53% rename from assets/js/f677311a.3b2a60f5.js rename to assets/js/b2ade0e8.d7e9a1d9.js index 069a9112c..1548efa6e 100644 --- a/assets/js/f677311a.3b2a60f5.js +++ b/assets/js/b2ade0e8.d7e9a1d9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[857],{1823:a=>{a.exports=JSON.parse('{"tag":{"label":"inclusivity","permalink":"/blog/tags/inclusivity","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/inclusivity","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6216],{391:e=>{e.exports=JSON.parse('{"tag":{"label":"open-source","permalink":"/blog/tags/open-source","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/open-source","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/b2c9ad8a.ff2e4e5e.js b/assets/js/b2c9ad8a.a9d785bd.js similarity index 85% rename from assets/js/b2c9ad8a.ff2e4e5e.js rename to assets/js/b2c9ad8a.a9d785bd.js index da5fb2470..344490782 100644 --- a/assets/js/b2c9ad8a.ff2e4e5e.js +++ b/assets/js/b2c9ad8a.a9d785bd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3680],{2319:a=>{a.exports=JSON.parse('{"tag":{"label":"app optimization","permalink":"/blog/tags/app-optimization","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/app-optimization","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5541],{2523:a=>{a.exports=JSON.parse('{"tag":{"label":"app optimization","permalink":"/blog/tags/app-optimization","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/app-optimization","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/b4068411.9f392b92.js b/assets/js/b4068411.9f392b92.js new file mode 100644 index 000000000..e2338571c --- /dev/null +++ b/assets/js/b4068411.9f392b92.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7881],{763:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"server-docs/setup/caprover","title":"Using CapRover","description":"CapRover is an open-source platform that simplifies the deployment and management of web applications through containerization, providing a user-friendly interface for developers.","source":"@site/docs/server-docs/setup/caprover.md","sourceDirName":"server-docs/setup","slug":"/server-docs/setup/caprover","permalink":"/docs/server-docs/setup/caprover","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/caprover.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":3,"frontMatter":{"title":"Using CapRover","sidebar_position":3},"sidebar":"docs","previous":{"title":"Using Docker Compose","permalink":"/docs/server-docs/setup/docker-compose"},"next":{"title":"Using TrueNAS Scale","permalink":"/docs/server-docs/setup/truenas-scale"}}');var n=o(6070),r=o(8591);const a={title:"Using CapRover",sidebar_position:3},i=void 0,p={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Log in to your CapRover Dashboard",id:"step-1-log-in-to-your-caprover-dashboard",level:2},{value:"Step 2: Navigate to the One-Click-Apps/Databases",id:"step-2-navigate-to-the-one-click-appsdatabases",level:2},{value:"Step 3: Connect Phalcode's third-party repository",id:"step-3-connect-phalcodes-third-party-repository",level:2},{value:"Step 4: Install our GameVault One-Click-App",id:"step-4-install-our-gamevault-one-click-app",level:2},{value:"Step 5: Enable WebSocket Support",id:"step-5-enable-websocket-support",level:2},{value:"Step 6: Configuring Volumes",id:"step-6-configuring-volumes",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Reading the Logs",id:"reading-the-logs",level:3}];function l(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://caprover.com",children:"CapRover"})," is an open-source platform that simplifies the deployment and management of web applications through containerization, providing a user-friendly interface for developers."]}),"\n",(0,n.jsxs)(t.p,{children:["Setting up a GameVault Server on CapRover is just a click away because we have created a CapRover ",(0,n.jsx)(t.a,{href:"https://caprover.com/docs/one-click-apps.html",children:"One-Click-App"})," Integration for this purpose. However, our app hasn't gained enough prominence to be included in the official ",(0,n.jsx)(t.a,{href:"https://caprover.com/docs/one-click-apps.html",children:"One-Click-App"})," Repository of CapRover. So, we decided to create our own ",(0,n.jsx)(t.a,{href:"https://github.com/Phalcode/caprover-one-click-apps",children:"third-party repository"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["In this guide, you will learn how to connect to our ",(0,n.jsx)(t.a,{href:"https://github.com/Phalcode/caprover-one-click-apps",children:"third-party repository"})," and install GameVault on your CapRover Instance."]}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["A running ",(0,n.jsx)(t.a,{href:"https://caprover.com",children:"CapRover"})," Server"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"step-1-log-in-to-your-caprover-dashboard",children:"Step 1: Log in to your CapRover Dashboard"}),"\n",(0,n.jsx)(t.p,{children:"Log in to your CapRover dashboard."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Step 1",src:o(360).A+"",width:"1917",height:"1038"})}),"\n",(0,n.jsx)(t.h2,{id:"step-2-navigate-to-the-one-click-appsdatabases",children:"Step 2: Navigate to the One-Click-Apps/Databases"}),"\n",(0,n.jsx)(t.p,{children:'Go to "Apps" and click on "One-Click Apps/Databases."'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Step 2",src:o(5971).A+"",width:"1896",height:"558"})}),"\n",(0,n.jsx)(t.h2,{id:"step-3-connect-phalcodes-third-party-repository",children:"Step 3: Connect Phalcode's third-party repository"}),"\n",(0,n.jsxs)(t.p,{children:['Scroll down to the bottom. Under "3rd party repositories," copy and paste the following link: ',(0,n.jsx)(t.code,{children:"https://phalcode.github.io/caprover-one-click-apps"}),'. Click the "Connect New Repository" button.']}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Step 3",src:o(410).A+"",width:"1885",height:"1021"})}),"\n",(0,n.jsx)(t.h2,{id:"step-4-install-our-gamevault-one-click-app",children:"Step 4: Install our GameVault One-Click-App"}),"\n",(0,n.jsx)(t.p,{children:"Now, all you need to do is search for 'GameVault' using the search box and follow the installation wizard."}),"\n",(0,n.jsx)(t.p,{children:"If you can't find GameVault in the list, try reloading the page and search again."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Step 4",src:o(837).A+"",width:"1895",height:"1044"})}),"\n",(0,n.jsx)(t.h2,{id:"step-5-enable-websocket-support",children:"Step 5: Enable WebSocket Support"}),"\n",(0,n.jsx)(t.p,{children:'Go to "Apps" and click on the GameVault App you just created. Make sure WebSocket Support is enabled.'}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Step 5",src:o(8572).A+"",width:"1896",height:"1039"})}),"\n",(0,n.jsx)(t.h2,{id:"step-6-configuring-volumes",children:"Step 6: Configuring Volumes"}),"\n",(0,n.jsx)(t.p,{children:"Configure your mounted volumes as you like."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Step 6",src:o(2503).A+"",width:"1896",height:"815"})}),"\n",(0,n.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,n.jsx)(t.p,{children:"You have now successfully set up your GameVault Server using CapRover."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,n.jsx)(t.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,n.jsx)(t.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,n.jsx)(t.p,{children:'Navigate to "Apps" and select the GameVault App you have created.'}),"\n",(0,n.jsx)(t.p,{children:'Click on "App Configs".'}),"\n",(0,n.jsx)(t.p,{children:'Set "Instance Count" to 0.'}),"\n",(0,n.jsx)(t.h3,{id:"reading-the-logs",children:"Reading the Logs"}),"\n",(0,n.jsx)(t.p,{children:'Navigate to "Apps" and choose the GameVault App you have created.'}),"\n",(0,n.jsx)(t.p,{children:'Click on "Deployment".'}),"\n",(0,n.jsx)(t.p,{children:'You should now see the logs. If needed, click on "View App Logs" first.'})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},360:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/caprover1-b2e08c5a64d4fc667209502af5bd7d18.png"},5971:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/caprover2-1ad3c8c65512162cf8b296ad9696ef97.png"},410:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/caprover3-61b95eef2e0c46c890e880b0f4958e52.png"},837:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/caprover4-282b9233c452d0493f0e290320b23fa2.png"},8572:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/caprover5-7c38f01362e6e9aaf3bab20273c7c82d.png"},2503:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/caprover6-9b25099f9bb4f31ace08f01a557a69c5.png"},8591:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>i});var s=o(758);const n={},r=s.createContext(n);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4068411.a6cf9b2a.js b/assets/js/b4068411.a6cf9b2a.js deleted file mode 100644 index 8977198dc..000000000 --- a/assets/js/b4068411.a6cf9b2a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8042],{176:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=o(2676),n=o(8358);const r={title:"Using CapRover",sidebar_position:3},a=void 0,i={id:"server-docs/setup/caprover",title:"Using CapRover",description:"CapRover is an open-source platform that simplifies the deployment and management of web applications through containerization, providing a user-friendly interface for developers.",source:"@site/docs/server-docs/setup/caprover.md",sourceDirName:"server-docs/setup",slug:"/server-docs/setup/caprover",permalink:"/docs/server-docs/setup/caprover",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/caprover.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:3,frontMatter:{title:"Using CapRover",sidebar_position:3},sidebar:"docs",previous:{title:"Using Docker Compose",permalink:"/docs/server-docs/setup/docker-compose"},next:{title:"Using TrueNAS Scale",permalink:"/docs/server-docs/setup/truenas-scale"}},p={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Log in to your CapRover Dashboard",id:"step-1-log-in-to-your-caprover-dashboard",level:2},{value:"Step 2: Navigate to the One-Click-Apps/Databases",id:"step-2-navigate-to-the-one-click-appsdatabases",level:2},{value:"Step 3: Connect Phalcode's third-party repository",id:"step-3-connect-phalcodes-third-party-repository",level:2},{value:"Step 4: Install our GameVault One-Click-App",id:"step-4-install-our-gamevault-one-click-app",level:2},{value:"Step 5: Enable WebSocket Support",id:"step-5-enable-websocket-support",level:2},{value:"Step 6: Configuring Volumes",id:"step-6-configuring-volumes",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Reading the Logs",id:"reading-the-logs",level:3}];function l(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://caprover.com",children:"CapRover"})," is an open-source platform that simplifies the deployment and management of web applications through containerization, providing a user-friendly interface for developers."]}),"\n",(0,s.jsxs)(t.p,{children:["Setting up a GameVault Server on CapRover is just a click away because we have created a CapRover ",(0,s.jsx)(t.a,{href:"https://caprover.com/docs/one-click-apps.html",children:"One-Click-App"})," Integration for this purpose. However, our app hasn't gained enough prominence to be included in the official ",(0,s.jsx)(t.a,{href:"https://caprover.com/docs/one-click-apps.html",children:"One-Click-App"})," Repository of CapRover. So, we decided to create our own ",(0,s.jsx)(t.a,{href:"https://github.com/Phalcode/caprover-one-click-apps",children:"third-party repository"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["In this guide, you will learn how to connect to our ",(0,s.jsx)(t.a,{href:"https://github.com/Phalcode/caprover-one-click-apps",children:"third-party repository"})," and install GameVault on your CapRover Instance."]}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["A running ",(0,s.jsx)(t.a,{href:"https://caprover.com",children:"CapRover"})," Server"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"step-1-log-in-to-your-caprover-dashboard",children:"Step 1: Log in to your CapRover Dashboard"}),"\n",(0,s.jsx)(t.p,{children:"Log in to your CapRover dashboard."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Step 1",src:o(1549).Z+"",width:"1917",height:"1038"})}),"\n",(0,s.jsx)(t.h2,{id:"step-2-navigate-to-the-one-click-appsdatabases",children:"Step 2: Navigate to the One-Click-Apps/Databases"}),"\n",(0,s.jsx)(t.p,{children:'Go to "Apps" and click on "One-Click Apps/Databases."'}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Step 2",src:o(1719).Z+"",width:"1896",height:"558"})}),"\n",(0,s.jsx)(t.h2,{id:"step-3-connect-phalcodes-third-party-repository",children:"Step 3: Connect Phalcode's third-party repository"}),"\n",(0,s.jsxs)(t.p,{children:['Scroll down to the bottom. Under "3rd party repositories," copy and paste the following link: ',(0,s.jsx)(t.code,{children:"https://phalcode.github.io/caprover-one-click-apps"}),'. Click the "Connect New Repository" button.']}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Step 3",src:o(5607).Z+"",width:"1885",height:"1021"})}),"\n",(0,s.jsx)(t.h2,{id:"step-4-install-our-gamevault-one-click-app",children:"Step 4: Install our GameVault One-Click-App"}),"\n",(0,s.jsx)(t.p,{children:"Now, all you need to do is search for 'GameVault' using the search box and follow the installation wizard."}),"\n",(0,s.jsx)(t.p,{children:"If you can't find GameVault in the list, try reloading the page and search again."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Step 4",src:o(1537).Z+"",width:"1895",height:"1044"})}),"\n",(0,s.jsx)(t.h2,{id:"step-5-enable-websocket-support",children:"Step 5: Enable WebSocket Support"}),"\n",(0,s.jsx)(t.p,{children:'Go to "Apps" and click on the GameVault App you just created. Make sure WebSocket Support is enabled.'}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Step 5",src:o(7451).Z+"",width:"1896",height:"1039"})}),"\n",(0,s.jsx)(t.h2,{id:"step-6-configuring-volumes",children:"Step 6: Configuring Volumes"}),"\n",(0,s.jsx)(t.p,{children:"Configure your mounted volumes as you like."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Step 6",src:o(4476).Z+"",width:"1896",height:"815"})}),"\n",(0,s.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsx)(t.p,{children:"You have now successfully set up your GameVault Server using CapRover."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,s.jsx)(t.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,s.jsx)(t.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,s.jsx)(t.p,{children:'Navigate to "Apps" and select the GameVault App you have created.'}),"\n",(0,s.jsx)(t.p,{children:'Click on "App Configs".'}),"\n",(0,s.jsx)(t.p,{children:'Set "Instance Count" to 0.'}),"\n",(0,s.jsx)(t.h3,{id:"reading-the-logs",children:"Reading the Logs"}),"\n",(0,s.jsx)(t.p,{children:'Navigate to "Apps" and choose the GameVault App you have created.'}),"\n",(0,s.jsx)(t.p,{children:'Click on "Deployment".'}),"\n",(0,s.jsx)(t.p,{children:'You should now see the logs. If needed, click on "View App Logs" first.'})]})}function d(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1549:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/caprover1-b2e08c5a64d4fc667209502af5bd7d18.png"},1719:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/caprover2-1ad3c8c65512162cf8b296ad9696ef97.png"},5607:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/caprover3-61b95eef2e0c46c890e880b0f4958e52.png"},1537:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/caprover4-282b9233c452d0493f0e290320b23fa2.png"},7451:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/caprover5-7c38f01362e6e9aaf3bab20273c7c82d.png"},4476:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/caprover6-9b25099f9bb4f31ace08f01a557a69c5.png"},8358:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>a});var s=o(5271);const n={},r=s.createContext(n);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b493ea72.002e1b38.js b/assets/js/b493ea72.002e1b38.js deleted file mode 100644 index 46bdfb2f3..000000000 --- a/assets/js/b493ea72.002e1b38.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4781],{9794:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var t=o(2676),i=o(8358);const r={title:"The Migrations are finally completed",authors:["alfagun74"],tags:["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},s=void 0,a={permalink:"/blog/2023/07/20/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-20.md",source:"@site/blog/2023-07-20.md",title:"The Migrations are finally completed",description:"Hey folks,",date:"2023-07-20T00:00:00.000Z",tags:[{inline:!0,label:"app name migration",permalink:"/blog/tags/app-name-migration"},{inline:!0,label:"Microsoft Store publication",permalink:"/blog/tags/microsoft-store-publication"},{inline:!0,label:"surge of new users",permalink:"/blog/tags/surge-of-new-users"},{inline:!0,label:"Discord server promotion",permalink:"/blog/tags/discord-server-promotion"},{inline:!0,label:"spreading the word",permalink:"/blog/tags/spreading-the-word"},{inline:!0,label:"logo deciphering",permalink:"/blog/tags/logo-deciphering"},{inline:!0,label:"box representation",permalink:"/blog/tags/box-representation"},{inline:!0,label:"keyhole representation",permalink:"/blog/tags/keyhole-representation"},{inline:!0,label:"logo concept discussion",permalink:"/blog/tags/logo-concept-discussion"},{inline:!0,label:"Discord channel",permalink:"/blog/tags/discord-channel"}],readingTime:.615,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"The Migrations are finally completed",authors:["alfagun74"],tags:["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},unlisted:!1,prevItem:{title:"Celebrating 600+ Installations and announcing the upcoming big feature",permalink:"/blog/2023/07/24/"},nextItem:{title:"Quick Migration Update and new Logo",permalink:"/blog/2023/07/19/"}},l={authorsImageUrls:[void 0]},c=[];function g(e){const n={a:"a",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Hey folks,"}),"\n",(0,t.jsx)(n.p,{children:"Great news. We've successfully migrated our App name in its entirety and will resume advertising as soon as it's published on the Microsoft Store. "}),"\n",(0,t.jsxs)(n.p,{children:["Just a heads up, there might be a surge of new users joining the ",(0,t.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," server due to us promoting GameVault across all available platforms now."]}),"\n",(0,t.jsx)(n.p,{children:"You're welcome to join in and spread the word about GameVault with your friends, family, social network, or colleagues!"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Let's decipher the mystery behind the new logo:"}),"\n",(0,t.jsx)(n.img,{alt:"logo",src:o(4474).Z+"",width:"1000",height:"103"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"The Box represents a Vault with a Keyhole, but it also symbolizes a game dice."}),"\n",(0,t.jsx)(n.li,{children:"The Keyhole represents a Keyhole, and simultaneously signifies a game piece."}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Did you find the logo concept creative? Share your thoughts on ",(0,t.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"discord"}),"!"]})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(e)}},4474:(e,n,o)=>{o.d(n,{Z:()=>t});const t=o.p+"assets/images/logo-text-and-image-sbs-6a7a4b169bd1cf62f643469e715ae759.png"},8358:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>s});var t=o(5271);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b493ea72.b58685f3.js b/assets/js/b493ea72.b58685f3.js new file mode 100644 index 000000000..713438824 --- /dev/null +++ b/assets/js/b493ea72.b58685f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5124],{165:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var o=t(4580),i=t(6070),r=t(8591);const s={title:"The Migrations are finally completed",authors:["alfagun74"],tags:["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},a=void 0,l={authorsImageUrls:[void 0]},c=[];function g(e){const n={a:"a",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Hey folks,"}),"\n",(0,i.jsx)(n.p,{children:"Great news. We've successfully migrated our App name in its entirety and will resume advertising as soon as it's published on the Microsoft Store. "}),"\n",(0,i.jsxs)(n.p,{children:["Just a heads up, there might be a surge of new users joining the ",(0,i.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," server due to us promoting GameVault across all available platforms now."]}),"\n",(0,i.jsx)(n.p,{children:"You're welcome to join in and spread the word about GameVault with your friends, family, social network, or colleagues!"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Let's decipher the mystery behind the new logo:"}),"\n",(0,i.jsx)(n.img,{alt:"logo",src:t(5364).A+"",width:"1000",height:"103"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The Box represents a Vault with a Keyhole, but it also symbolizes a game dice."}),"\n",(0,i.jsx)(n.li,{children:"The Keyhole represents a Keyhole, and simultaneously signifies a game piece."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Did you find the logo concept creative? Share your thoughts on ",(0,i.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"discord"}),"!"]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(g,{...e})}):g(e)}},5364:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/logo-text-and-image-sbs-6a7a4b169bd1cf62f643469e715ae759.png"},8591:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(758);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}},4580:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-20.md","source":"@site/blog/2023-07-20.md","title":"The Migrations are finally completed","description":"Hey folks,","date":"2023-07-20T00:00:00.000Z","tags":[{"inline":true,"label":"app name migration","permalink":"/blog/tags/app-name-migration"},{"inline":true,"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication"},{"inline":true,"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users"},{"inline":true,"label":"Discord server promotion","permalink":"/blog/tags/discord-server-promotion"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering"},{"inline":true,"label":"box representation","permalink":"/blog/tags/box-representation"},{"inline":true,"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation"},{"inline":true,"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"The Migrations are finally completed","authors":["alfagun74"],"tags":["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},"unlisted":false,"prevItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"},"nextItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"}}')}}]); \ No newline at end of file diff --git a/assets/js/b7026fb3.5b81eaa4.js b/assets/js/b7026fb3.5b81eaa4.js new file mode 100644 index 000000000..a6f6b6500 --- /dev/null +++ b/assets/js/b7026fb3.5b81eaa4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8033],{1620:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>s,metadata:()=>n,toc:()=>u});var n=a(1663),i=a(6070),r=a(8591);const s={title:"Battling Harassment and Trolls in Our App Community",authors:["alfagun74"],tags:["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},o=void 0,l={authorsImageUrls:[void 0]},u=[];function p(e){const t={a:"a",p:"p",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Hey folks,"}),"\n",(0,i.jsx)(t.p,{children:"We have an important update to share with you all while our poll is in progress. It has come to our attention that a group of individuals has been engaging in harassing, blackmailing, and threatening behavior towards us. "}),"\n",(0,i.jsxs)(t.p,{children:["It began with spam on our Issue Trackers and ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),' Server but this situation has escalated to the point where these individuals went so far as to search me up on LinkedIn and threaten to inform my employer with baseless accusations of racism because of trivial reasons like the branch name in our github project being "master". Moreover, we have received reports that these trolls have extended their actions directly to other members of this server, attempting to spread negative narratives and disrupting the community atmosphere.']}),"\n",(0,i.jsxs)(t.p,{children:["To address this issue, we kindly request that you promptly report any encounters with these trolls to both ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," and our dedicated team of moderators. By doing so, we can take appropriate measures to handle the situation and maintain a safe environment for all."]}),"\n",(0,i.jsx)(t.p,{children:"We would like to emphasize that we are not racist individuals, but rather developers who decided to share our hard work with the community, hoping to bring joy and utility to everyone. Unfortunately, we did not anticipate encountering such creepy behavior when we made the project public. It has made us question whether it was the right decision to open up our work in the first place."}),"\n",(0,i.jsxs)(t.p,{children:["If you appreciate our efforts and would like to support us and the app, we humbly ask for your financial assistance. Even a small contribution of five bucks on ",(0,i.jsx)(t.a,{href:"https://ko-fi.com/phalcode",children:"Kofi"})," would go a long way in helping us maintain our motivation and dedication. Alternatively, if monetary support isn't possible, we would be incredibly grateful if you could share kind words about how the GameVault app has positively impacted your life in the #chat channel. Your encouragement means the world to us. \ud83e\udd70"]}),"\n",(0,i.jsx)(t.p,{children:"In addition, we encourage you to continue reporting any bugs you encounter and submitting feature requests in the respective GitHub trackers. With your valuable input, we can continue improving the app and making it even better."}),"\n",(0,i.jsx)(t.p,{children:"Remember, the success of this project relies on your support and engagement. Let's stand together against these trolls and ensure a positive and inclusive community experience. Thank you for your attention and understanding."})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>o});var n=a(758);const i={},r=n.createContext(i);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(r.Provider,{value:t},e.children)}},1663:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-09.md","source":"@site/blog/2023-07-09.md","title":"Battling Harassment and Trolls in Our App Community","description":"Hey folks,","date":"2023-07-09T00:00:00.000Z","tags":[{"inline":true,"label":"harassment","permalink":"/blog/tags/harassment"},{"inline":true,"label":"blackmail","permalink":"/blog/tags/blackmail"},{"inline":true,"label":"threats","permalink":"/blog/tags/threats"},{"inline":true,"label":"spam","permalink":"/blog/tags/spam"},{"inline":true,"label":"trolls","permalink":"/blog/tags/trolls"},{"inline":true,"label":"negative narratives","permalink":"/blog/tags/negative-narratives"},{"inline":true,"label":"safe environment","permalink":"/blog/tags/safe-environment"},{"inline":true,"label":"racist","permalink":"/blog/tags/racist"},{"inline":true,"label":"developers","permalink":"/blog/tags/developers"},{"inline":true,"label":"public","permalink":"/blog/tags/public"},{"inline":true,"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior"},{"inline":true,"label":"app","permalink":"/blog/tags/app"},{"inline":true,"label":"support","permalink":"/blog/tags/support"},{"inline":true,"label":"financial assistance","permalink":"/blog/tags/financial-assistance"},{"inline":true,"label":"motivation","permalink":"/blog/tags/motivation"},{"inline":true,"label":"GameVault app","permalink":"/blog/tags/game-vault-app"},{"inline":true,"label":"bugs","permalink":"/blog/tags/bugs"},{"inline":true,"label":"feature requests","permalink":"/blog/tags/feature-requests"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"success","permalink":"/blog/tags/success"},{"inline":true,"label":"engagement","permalink":"/blog/tags/engagement"}],"readingTime":1.955,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Battling Harassment and Trolls in Our App Community","authors":["alfagun74"],"tags":["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},"unlisted":false,"prevItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"},"nextItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}}')}}]); \ No newline at end of file diff --git a/assets/js/b7026fb3.9d4162c0.js b/assets/js/b7026fb3.9d4162c0.js deleted file mode 100644 index 3579967d3..000000000 --- a/assets/js/b7026fb3.9d4162c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[752],{2660:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=t(2676),i=t(8358);const s={title:"Battling Harassment and Trolls in Our App Community",authors:["alfagun74"],tags:["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},r=void 0,o={permalink:"/blog/2023/07/09/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-09.md",source:"@site/blog/2023-07-09.md",title:"Battling Harassment and Trolls in Our App Community",description:"Hey folks,",date:"2023-07-09T00:00:00.000Z",tags:[{inline:!0,label:"harassment",permalink:"/blog/tags/harassment"},{inline:!0,label:"blackmail",permalink:"/blog/tags/blackmail"},{inline:!0,label:"threats",permalink:"/blog/tags/threats"},{inline:!0,label:"spam",permalink:"/blog/tags/spam"},{inline:!0,label:"trolls",permalink:"/blog/tags/trolls"},{inline:!0,label:"negative narratives",permalink:"/blog/tags/negative-narratives"},{inline:!0,label:"safe environment",permalink:"/blog/tags/safe-environment"},{inline:!0,label:"racist",permalink:"/blog/tags/racist"},{inline:!0,label:"developers",permalink:"/blog/tags/developers"},{inline:!0,label:"public",permalink:"/blog/tags/public"},{inline:!0,label:"creepy behavior",permalink:"/blog/tags/creepy-behavior"},{inline:!0,label:"app",permalink:"/blog/tags/app"},{inline:!0,label:"support",permalink:"/blog/tags/support"},{inline:!0,label:"financial assistance",permalink:"/blog/tags/financial-assistance"},{inline:!0,label:"motivation",permalink:"/blog/tags/motivation"},{inline:!0,label:"GameVault app",permalink:"/blog/tags/game-vault-app"},{inline:!0,label:"bugs",permalink:"/blog/tags/bugs"},{inline:!0,label:"feature requests",permalink:"/blog/tags/feature-requests"},{inline:!0,label:"improvement",permalink:"/blog/tags/improvement"},{inline:!0,label:"success",permalink:"/blog/tags/success"},{inline:!0,label:"engagement",permalink:"/blog/tags/engagement"}],readingTime:1.955,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Battling Harassment and Trolls in Our App Community",authors:["alfagun74"],tags:["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},unlisted:!1,prevItem:{title:"A Closer Look at GameVaults 'Source-Available' Nature",permalink:"/blog/2023/07/13/"},nextItem:{title:"Choosing a New, Family-Friendly Name for this project!",permalink:"/blog/2023/07/08/"}},l={authorsImageUrls:[void 0]},p=[];function u(e){const a={a:"a",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey folks,"}),"\n",(0,n.jsx)(a.p,{children:"We have an important update to share with you all while our poll is in progress. It has come to our attention that a group of individuals has been engaging in harassing, blackmailing, and threatening behavior towards us. "}),"\n",(0,n.jsxs)(a.p,{children:["It began with spam on our Issue Trackers and ",(0,n.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),' Server but this situation has escalated to the point where these individuals went so far as to search me up on LinkedIn and threaten to inform my employer with baseless accusations of racism because of trivial reasons like the branch name in our github project being "master". Moreover, we have received reports that these trolls have extended their actions directly to other members of this server, attempting to spread negative narratives and disrupting the community atmosphere.']}),"\n",(0,n.jsxs)(a.p,{children:["To address this issue, we kindly request that you promptly report any encounters with these trolls to both ",(0,n.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," and our dedicated team of moderators. By doing so, we can take appropriate measures to handle the situation and maintain a safe environment for all."]}),"\n",(0,n.jsx)(a.p,{children:"We would like to emphasize that we are not racist individuals, but rather developers who decided to share our hard work with the community, hoping to bring joy and utility to everyone. Unfortunately, we did not anticipate encountering such creepy behavior when we made the project public. It has made us question whether it was the right decision to open up our work in the first place."}),"\n",(0,n.jsxs)(a.p,{children:["If you appreciate our efforts and would like to support us and the app, we humbly ask for your financial assistance. Even a small contribution of five bucks on ",(0,n.jsx)(a.a,{href:"https://ko-fi.com/phalcode",children:"Kofi"})," would go a long way in helping us maintain our motivation and dedication. Alternatively, if monetary support isn't possible, we would be incredibly grateful if you could share kind words about how the GameVault app has positively impacted your life in the #chat channel. Your encouragement means the world to us. \ud83e\udd70"]}),"\n",(0,n.jsx)(a.p,{children:"In addition, we encourage you to continue reporting any bugs you encounter and submitting feature requests in the respective GitHub trackers. With your valuable input, we can continue improving the app and making it even better."}),"\n",(0,n.jsx)(a.p,{children:"Remember, the success of this project relies on your support and engagement. Let's stand together against these trolls and ensure a positive and inclusive community experience. Thank you for your attention and understanding."})]})}function c(e={}){const{wrapper:a}={...(0,i.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>o,a:()=>r});var n=t(5271);const i={},s=n.createContext(i);function r(e){const a=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b8ecf3c5.1414f1c5.js b/assets/js/b8ecf3c5.1414f1c5.js new file mode 100644 index 000000000..c219cf669 --- /dev/null +++ b/assets/js/b8ecf3c5.1414f1c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7508],{1289:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"client-docs/setup","title":"Setting up a GameVault Client","description":"If you want to use GameVault to download and install games on your computer, you need to follow these steps.","source":"@site/docs/client-docs/setup.md","sourceDirName":"client-docs","slug":"/client-docs/setup","permalink":"/docs/client-docs/setup","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/setup.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"docs","previous":{"title":"Server News","permalink":"/docs/server-docs/server-news"},"next":{"title":"How to Use","permalink":"/docs/client-docs/how-to-use"}}');var i=t(6070),l=t(8591);const s={sidebar_position:1},r="Setting up a GameVault Client",a={},d=[{value:"Installation",id:"installation",level:2},{value:"Recommended Installation Option",id:"recommended-installation-option",level:3},{value:"Alternative Installation Options",id:"alternative-installation-options",level:3},{value:"Option 1: Obtain Pre-Built Artifacts from Github",id:"option-1-obtain-pre-built-artifacts-from-github",level:4},{value:"Option 2: Linux Installation",id:"option-2-linux-installation",level:4},{value:"Option 3: Self-Compiling on Windows",id:"option-3-self-compiling-on-windows",level:4},{value:"Option 4: Extracting from the .appxbundle",id:"option-4-extracting-from-the-appxbundle",level:4},{value:"Initial Configuration",id:"initial-configuration",level:2},{value:"Step 1: Select the Root Folder",id:"step-1-select-the-root-folder",level:3},{value:"Step 2: Entering the Selfhosted Backend Server URL",id:"step-2-entering-the-selfhosted-backend-server-url",level:3},{value:"Option 1: Self-hosted GameVault Server",id:"option-1-self-hosted-gamevault-server",level:4},{value:"Option 2: Using the Demo Server",id:"option-2-using-the-demo-server",level:4},{value:"Step 3: Log In or Register",id:"step-3-log-in-or-register",level:3},{value:"Option 1: Login",id:"option-1-login",level:4},{value:"Option 2: Register",id:"option-2-register",level:4},{value:"Conclusion",id:"conclusion",level:2}];function c(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"setting-up-a-gamevault-client",children:"Setting up a GameVault Client"})}),"\n",(0,i.jsx)(n.p,{children:"If you want to use GameVault to download and install games on your computer, you need to follow these steps."}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.h3,{id:"recommended-installation-option",children:"Recommended Installation Option"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Requirement:"})," Windows 10/11 Operating System with Microsoft Store installed"]}),"\n",(0,i.jsxs)(n.p,{children:["To begin, install the GameVault application from ",(0,i.jsx)(n.a,{href:"https://www.microsoft.com/store/apps/9PCKDV76GL75",children:"the official Microsoft Store"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Experienced users can also simply run this command in the PowerShell:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ps",children:"winget install gamevault\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This process should be straightforward and will only consume a few minutes of your time. After installing, feel free to continue at ",(0,i.jsx)(n.a,{href:"#initial-configuration",children:"Initial Configuration"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"alternative-installation-options",children:"Alternative Installation Options"}),"\n",(0,i.jsx)(n.p,{children:"If you for some reason prefer not to use the Microsoft Store or if you are operating on a different platform, there are multiple other methods available for installing the GameVault Client Application."}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Please not that any other method than installing it from the Microsoft Store is ",(0,i.jsx)(n.strong,{children:"unsupported"})," and ",(0,i.jsx)(n.strong,{children:"unrecommended"})," and should only be used as a last resort. Also be aware ",(0,i.jsx)(n.a,{href:"/docs/client-docs/updating-client#other-sources",children:"that you will be responsible for managing updates manually!"})]})}),"\n",(0,i.jsx)(n.h4,{id:"option-1-obtain-pre-built-artifacts-from-github",children:"Option 1: Obtain Pre-Built Artifacts from Github"}),"\n",(0,i.jsxs)(n.p,{children:["Access the most recent Pre-Built Artifact ",(0,i.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-app/releases/latest",children:"here."})]}),"\n",(0,i.jsx)(n.admonition,{title:"Antivirus/Smartscreen Warning",type:"note",children:(0,i.jsxs)(n.p,{children:["Your Antivirus or Windows Smartscreen may attempt to prevent you from running our pre-built application, because it is a suspicious-looking binary compiled by an unfamiliar source. This is because we lack a Code Signing Certificate due to budget constraints. You can safely disregard this warning and proceed to run the App by selecting ",(0,i.jsx)(n.code,{children:"More Details"})," and then choosing ",(0,i.jsx)(n.code,{children:"Run Anyway"}),"."]})}),"\n",(0,i.jsx)(n.h4,{id:"option-2-linux-installation",children:"Option 2: Linux Installation"}),"\n",(0,i.jsxs)(n.p,{children:["To run GameVault on Linux utilizing Wine, follow this community-driven method. Visit ",(0,i.jsx)(n.a,{href:"/docs/advanced-usage/linux-client",children:"this"})," page for more details."]}),"\n",(0,i.jsx)(n.h4,{id:"option-3-self-compiling-on-windows",children:"Option 3: Self-Compiling on Windows"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Install Visual Studio IDE"}),"\n",(0,i.jsx)(n.li,{children:"Include the 2017 build system"}),"\n",(0,i.jsx)(n.li,{children:"Clone the gamevault-app source code"}),"\n",(0,i.jsxs)(n.li,{children:["Open Visual Studio and choose the ",(0,i.jsx)(n.code,{children:".sln"})," file"]}),"\n",(0,i.jsxs)(n.li,{children:["Pick ",(0,i.jsx)(n.code,{children:"Release"})," from the Dropdown menu."]}),"\n",(0,i.jsx)(n.li,{children:"Build > Build gamevault"}),"\n",(0,i.jsx)(n.li,{children:"Utilize the output files."}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"option-4-extracting-from-the-appxbundle",children:"Option 4: Extracting from the .appxbundle"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Go to ",(0,i.jsx)(n.a,{href:"https://store.rg-adguard.net",children:"https://store.rg-adguard.net"})]}),"\n",(0,i.jsxs)(n.li,{children:["Paste ",(0,i.jsx)(n.code,{children:"https://www.microsoft.com/store/apps/9PCKDV76GL75"})," in the search box"]}),"\n",(0,i.jsx)(n.li,{children:"Download the current .appxbundle"}),"\n",(0,i.jsxs)(n.li,{children:["Extract the .appxbundle, followed by the ",(0,i.jsx)(n.code,{children:"ReleasePackage_[VERSION]_x64.appx"})," file."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"initial-configuration",children:"Initial Configuration"}),"\n",(0,i.jsx)(n.p,{children:"Once you have installed and launched GameVault, you need to do some initial configuration to get it up and running properly."}),"\n",(0,i.jsx)(n.h3,{id:"step-1-select-the-root-folder",children:"Step 1: Select the Root Folder"}),"\n",(0,i.jsxs)(n.p,{children:["In this step, you will choose the location where all your downloaded and installed games will be stored. This folder will act as the central location for your game library. We recommend you to have a read on the ",(0,i.jsx)(n.a,{href:"/docs/client-docs/how-to-use",children:'"How to Use" Chapter'})," to understand how the root folder works."]}),"\n",(0,i.jsx)(n.p,{children:"To select the root folder, follow the instructions below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:'Click the "Select Root Path" button.'}),"\n",(0,i.jsx)(n.li,{children:"Navigate to the desired location on your computer."}),"\n",(0,i.jsx)(n.li,{children:"Choose a folder with sufficient storage space to store your game collection."}),"\n",(0,i.jsx)(n.li,{children:'Once you have selected the folder, click "Next" to proceed.'}),"\n",(0,i.jsxs)(n.li,{children:["GameVault will automatically generate a Subfolder called ",(0,i.jsx)(n.code,{children:"GameVault"})," in your selected Folder with some initial data."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"step-2-entering-the-selfhosted-backend-server-url",children:"Step 2: Entering the Selfhosted Backend Server URL"}),"\n",(0,i.jsx)(n.p,{children:"To connect your GameVault application to the backend server, you need to provide the URL of the server. Depending on your setup, follow one of the two options below:"}),"\n",(0,i.jsx)(n.h4,{id:"option-1-self-hosted-gamevault-server",children:"Option 1: Self-hosted GameVault Server"}),"\n",(0,i.jsx)(n.p,{children:"If you have your own self-hosted GameVault server, please enter its URL in the provided field. Follow the instructions below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Enter the URL of your self-hosted GameVault server in the provided field."}),"\n",(0,i.jsx)(n.li,{children:"Make sure you have the correct URL and it is accessible."}),"\n",(0,i.jsx)(n.li,{children:'Click "Next" to proceed.'}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"option-2-using-the-demo-server",children:"Option 2: Using the Demo Server"}),"\n",(0,i.jsx)(n.p,{children:"If you only want to try out GameVault, without setting up your own server, you can use our demo server. There open-source videogames available. Keep in mind that you will have mostly read-only non-admin rights on that server. To use the demo server, follow the instructions below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:'Enter "demo.gamevau.lt" as the URL in the provided field.'}),"\n",(0,i.jsx)(n.li,{children:"This will allow you to explore the features and functionality of GameVault."}),"\n",(0,i.jsx)(n.li,{children:'Click "Next" to proceed'}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{title:"Demo Server Credentials",type:"info",children:(0,i.jsxs)(n.p,{children:["Username: ",(0,i.jsx)(n.strong,{children:"demo"}),(0,i.jsx)(n.br,{}),"\n","Password: ",(0,i.jsx)(n.strong,{children:"demodemo"})]})}),"\n",(0,i.jsx)(n.h3,{id:"step-3-log-in-or-register",children:"Step 3: Log In or Register"}),"\n",(0,i.jsx)(n.p,{children:"In this step, you will need to log in to your GameVault account on the selected backend server. Choose one of the following options based on your situation:"}),"\n",(0,i.jsx)(n.h4,{id:"option-1-login",children:"Option 1: Login"}),"\n",(0,i.jsx)(n.p,{children:"If you already have a GameVault account on the selected server, follow these steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:'Select "Login" from the options.'}),"\n",(0,i.jsx)(n.li,{children:"Enter your login credentials (username and password) in the provided fields."}),"\n",(0,i.jsx)(n.li,{children:"Ensure that the credentials are specific to the GameVault backend server you have chosen."}),"\n",(0,i.jsx)(n.li,{children:'Click "Log in" to proceed.'}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"option-2-register",children:"Option 2: Register"}),"\n",(0,i.jsx)(n.p,{children:"If you don't have an account on the selected GameVault backend server, follow these steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:'Click the "Register" button.'}),"\n",(0,i.jsx)(n.li,{children:"Follow the instructions provided to create your GameVault account on the backend server."}),"\n",(0,i.jsx)(n.li,{children:"The server administrators may have to activate your account before you can use it to log in. Contact them if necessary."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,i.jsx)(n.p,{children:"Congratulations! You have successfully installed and completed the initial configuration of GameVault. You are now ready to explore and enjoy the features and functionality of the app. If you have any further questions or need assistance, refer to the remaining chapters of this documentation or reach out to our support team for help."}),"\n",(0,i.jsxs)(n.p,{children:["We specifically recommend to read the ",(0,i.jsx)(n.a,{href:"/docs/client-docs/how-to-use",children:'"How to Use" Chapter'})," to understand how GameVault works."]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(758);const i={},l=o.createContext(i);function s(e){const n=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b8ecf3c5.ef8f4fbe.js b/assets/js/b8ecf3c5.ef8f4fbe.js deleted file mode 100644 index 770bfbfdc..000000000 --- a/assets/js/b8ecf3c5.ef8f4fbe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9847],{6262:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var o=t(2676),i=t(8358);const l={sidebar_position:1},s="Setting up a GameVault Client",r={id:"client-docs/setup",title:"Setting up a GameVault Client",description:"If you want to use GameVault to download and install games on your computer, you need to follow these steps.",source:"@site/docs/client-docs/setup.md",sourceDirName:"client-docs",slug:"/client-docs/setup",permalink:"/docs/client-docs/setup",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/setup.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"docs",previous:{title:"Server News",permalink:"/docs/server-docs/server-news"},next:{title:"How to Use",permalink:"/docs/client-docs/how-to-use"}},a={},d=[{value:"Installation",id:"installation",level:2},{value:"Recommended Installation Option",id:"recommended-installation-option",level:3},{value:"Alternative Installation Options",id:"alternative-installation-options",level:3},{value:"Option 1: Obtain Pre-Built Artifacts from Github",id:"option-1-obtain-pre-built-artifacts-from-github",level:4},{value:"Option 2: Linux Installation",id:"option-2-linux-installation",level:4},{value:"Option 3: Self-Compiling on Windows",id:"option-3-self-compiling-on-windows",level:4},{value:"Option 4: Extracting from the .appxbundle",id:"option-4-extracting-from-the-appxbundle",level:4},{value:"Initial Configuration",id:"initial-configuration",level:2},{value:"Step 1: Select the Root Folder",id:"step-1-select-the-root-folder",level:3},{value:"Step 2: Entering the Selfhosted Backend Server URL",id:"step-2-entering-the-selfhosted-backend-server-url",level:3},{value:"Option 1: Self-hosted GameVault Server",id:"option-1-self-hosted-gamevault-server",level:4},{value:"Option 2: Using the Demo Server",id:"option-2-using-the-demo-server",level:4},{value:"Step 3: Log In or Register",id:"step-3-log-in-or-register",level:3},{value:"Option 1: Login",id:"option-1-login",level:4},{value:"Option 2: Register",id:"option-2-register",level:4},{value:"Conclusion",id:"conclusion",level:2}];function c(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"setting-up-a-gamevault-client",children:"Setting up a GameVault Client"})}),"\n",(0,o.jsx)(n.p,{children:"If you want to use GameVault to download and install games on your computer, you need to follow these steps."}),"\n",(0,o.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(n.h3,{id:"recommended-installation-option",children:"Recommended Installation Option"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Requirement:"})," Windows 10/11 Operating System with Microsoft Store installed"]}),"\n",(0,o.jsxs)(n.p,{children:["To begin, install the GameVault application from ",(0,o.jsx)(n.a,{href:"https://www.microsoft.com/store/apps/9PCKDV76GL75",children:"the official Microsoft Store"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Experienced users can also simply run this command in the PowerShell:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-ps",children:"winget install gamevault\n"})}),"\n",(0,o.jsxs)(n.p,{children:["This process should be straightforward and will only consume a few minutes of your time. After installing, feel free to continue at ",(0,o.jsx)(n.a,{href:"#initial-configuration",children:"Initial Configuration"}),"."]}),"\n",(0,o.jsx)(n.h3,{id:"alternative-installation-options",children:"Alternative Installation Options"}),"\n",(0,o.jsx)(n.p,{children:"If you for some reason prefer not to use the Microsoft Store or if you are operating on a different platform, there are multiple other methods available for installing the GameVault Client Application."}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["Please not that any other method than installing it from the Microsoft Store is ",(0,o.jsx)(n.strong,{children:"unsupported"})," and ",(0,o.jsx)(n.strong,{children:"unrecommended"})," and should only be used as a last resort. Also be aware ",(0,o.jsx)(n.a,{href:"/docs/client-docs/updating-client#other-sources",children:"that you will be responsible for managing updates manually!"})]})}),"\n",(0,o.jsx)(n.h4,{id:"option-1-obtain-pre-built-artifacts-from-github",children:"Option 1: Obtain Pre-Built Artifacts from Github"}),"\n",(0,o.jsxs)(n.p,{children:["Access the most recent Pre-Built Artifact ",(0,o.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-app/releases/latest",children:"here."})]}),"\n",(0,o.jsx)(n.admonition,{title:"Antivirus/Smartscreen Warning",type:"note",children:(0,o.jsxs)(n.p,{children:["Your Antivirus or Windows Smartscreen may attempt to prevent you from running our pre-built application, because it is a suspicious-looking binary compiled by an unfamiliar source. This is because we lack a Code Signing Certificate due to budget constraints. You can safely disregard this warning and proceed to run the App by selecting ",(0,o.jsx)(n.code,{children:"More Details"})," and then choosing ",(0,o.jsx)(n.code,{children:"Run Anyway"}),"."]})}),"\n",(0,o.jsx)(n.h4,{id:"option-2-linux-installation",children:"Option 2: Linux Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To run GameVault on Linux utilizing Wine, follow this community-driven method. Visit ",(0,o.jsx)(n.a,{href:"/docs/advanced-usage/linux-client",children:"this"})," page for more details."]}),"\n",(0,o.jsx)(n.h4,{id:"option-3-self-compiling-on-windows",children:"Option 3: Self-Compiling on Windows"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Install Visual Studio IDE"}),"\n",(0,o.jsx)(n.li,{children:"Include the 2017 build system"}),"\n",(0,o.jsx)(n.li,{children:"Clone the gamevault-app source code"}),"\n",(0,o.jsxs)(n.li,{children:["Open Visual Studio and choose the ",(0,o.jsx)(n.code,{children:".sln"})," file"]}),"\n",(0,o.jsxs)(n.li,{children:["Pick ",(0,o.jsx)(n.code,{children:"Release"})," from the Dropdown menu."]}),"\n",(0,o.jsx)(n.li,{children:"Build > Build gamevault"}),"\n",(0,o.jsx)(n.li,{children:"Utilize the output files."}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"option-4-extracting-from-the-appxbundle",children:"Option 4: Extracting from the .appxbundle"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Go to ",(0,o.jsx)(n.a,{href:"https://store.rg-adguard.net",children:"https://store.rg-adguard.net"})]}),"\n",(0,o.jsxs)(n.li,{children:["Paste ",(0,o.jsx)(n.code,{children:"https://www.microsoft.com/store/apps/9PCKDV76GL75"})," in the search box"]}),"\n",(0,o.jsx)(n.li,{children:"Download the current .appxbundle"}),"\n",(0,o.jsxs)(n.li,{children:["Extract the .appxbundle, followed by the ",(0,o.jsx)(n.code,{children:"ReleasePackage_[VERSION]_x64.appx"})," file."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"initial-configuration",children:"Initial Configuration"}),"\n",(0,o.jsx)(n.p,{children:"Once you have installed and launched GameVault, you need to do some initial configuration to get it up and running properly."}),"\n",(0,o.jsx)(n.h3,{id:"step-1-select-the-root-folder",children:"Step 1: Select the Root Folder"}),"\n",(0,o.jsxs)(n.p,{children:["In this step, you will choose the location where all your downloaded and installed games will be stored. This folder will act as the central location for your game library. We recommend you to have a read on the ",(0,o.jsx)(n.a,{href:"/docs/client-docs/how-to-use",children:'"How to Use" Chapter'})," to understand how the root folder works."]}),"\n",(0,o.jsx)(n.p,{children:"To select the root folder, follow the instructions below:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:'Click the "Select Root Path" button.'}),"\n",(0,o.jsx)(n.li,{children:"Navigate to the desired location on your computer."}),"\n",(0,o.jsx)(n.li,{children:"Choose a folder with sufficient storage space to store your game collection."}),"\n",(0,o.jsx)(n.li,{children:'Once you have selected the folder, click "Next" to proceed.'}),"\n",(0,o.jsxs)(n.li,{children:["GameVault will automatically generate a Subfolder called ",(0,o.jsx)(n.code,{children:"GameVault"})," in your selected Folder with some initial data."]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"step-2-entering-the-selfhosted-backend-server-url",children:"Step 2: Entering the Selfhosted Backend Server URL"}),"\n",(0,o.jsx)(n.p,{children:"To connect your GameVault application to the backend server, you need to provide the URL of the server. Depending on your setup, follow one of the two options below:"}),"\n",(0,o.jsx)(n.h4,{id:"option-1-self-hosted-gamevault-server",children:"Option 1: Self-hosted GameVault Server"}),"\n",(0,o.jsx)(n.p,{children:"If you have your own self-hosted GameVault server, please enter its URL in the provided field. Follow the instructions below:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Enter the URL of your self-hosted GameVault server in the provided field."}),"\n",(0,o.jsx)(n.li,{children:"Make sure you have the correct URL and it is accessible."}),"\n",(0,o.jsx)(n.li,{children:'Click "Next" to proceed.'}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"option-2-using-the-demo-server",children:"Option 2: Using the Demo Server"}),"\n",(0,o.jsx)(n.p,{children:"If you only want to try out GameVault, without setting up your own server, you can use our demo server. There open-source videogames available. Keep in mind that you will have mostly read-only non-admin rights on that server. To use the demo server, follow the instructions below:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:'Enter "demo.gamevau.lt" as the URL in the provided field.'}),"\n",(0,o.jsx)(n.li,{children:"This will allow you to explore the features and functionality of GameVault."}),"\n",(0,o.jsx)(n.li,{children:'Click "Next" to proceed'}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{title:"Demo Server Credentials",type:"info",children:(0,o.jsxs)(n.p,{children:["Username: ",(0,o.jsx)(n.strong,{children:"demo"}),(0,o.jsx)(n.br,{}),"\n","Password: ",(0,o.jsx)(n.strong,{children:"demodemo"})]})}),"\n",(0,o.jsx)(n.h3,{id:"step-3-log-in-or-register",children:"Step 3: Log In or Register"}),"\n",(0,o.jsx)(n.p,{children:"In this step, you will need to log in to your GameVault account on the selected backend server. Choose one of the following options based on your situation:"}),"\n",(0,o.jsx)(n.h4,{id:"option-1-login",children:"Option 1: Login"}),"\n",(0,o.jsx)(n.p,{children:"If you already have a GameVault account on the selected server, follow these steps:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:'Select "Login" from the options.'}),"\n",(0,o.jsx)(n.li,{children:"Enter your login credentials (username and password) in the provided fields."}),"\n",(0,o.jsx)(n.li,{children:"Ensure that the credentials are specific to the GameVault backend server you have chosen."}),"\n",(0,o.jsx)(n.li,{children:'Click "Log in" to proceed.'}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"option-2-register",children:"Option 2: Register"}),"\n",(0,o.jsx)(n.p,{children:"If you don't have an account on the selected GameVault backend server, follow these steps:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:'Click the "Register" button.'}),"\n",(0,o.jsx)(n.li,{children:"Follow the instructions provided to create your GameVault account on the backend server."}),"\n",(0,o.jsx)(n.li,{children:"The server administrators may have to activate your account before you can use it to log in. Contact them if necessary."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,o.jsx)(n.p,{children:"Congratulations! You have successfully installed and completed the initial configuration of GameVault. You are now ready to explore and enjoy the features and functionality of the app. If you have any further questions or need assistance, refer to the remaining chapters of this documentation or reach out to our support team for help."}),"\n",(0,o.jsxs)(n.p,{children:["We specifically recommend to read the ",(0,o.jsx)(n.a,{href:"/docs/client-docs/how-to-use",children:'"How to Use" Chapter'})," to understand how GameVault works."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8358:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>s});var o=t(5271);const i={},l=o.createContext(i);function s(e){const n=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba3af7ad.1e4788ab.js b/assets/js/ba3af7ad.1e4788ab.js new file mode 100644 index 000000000..7f3b311a3 --- /dev/null +++ b/assets/js/ba3af7ad.1e4788ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9378],{5085:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>g,frontMatter:()=>o,metadata:()=>t,toc:()=>m});var t=n(6944),l=n(6070),i=n(8591);const o={title:"Choosing a New, Family-Friendly Name for this project!",authors:["alfagun74"],tags:["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},r=void 0,s={authorsImageUrls:[void 0]},m=[];function u(e){const a={a:"a",p:"p",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.p,{children:"Hello, everyone!"}),"\n",(0,l.jsxs)(a.p,{children:["We have an important announcement to share about our ",(0,l.jsx)(a.a,{href:"https://en.wikipedia.org/wiki/Source-available_software",children:"source-available"})," gaming platform, project. We have listened to your feedback and concerns, and now we need your help in choosing a new, family-friendly name that better reflects our platform's values."]})]})}function g(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,l.jsx)(a,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},8591:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(758);const l={},i=t.createContext(l);function o(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),t.createElement(i.Provider,{value:a},e.children)}},6944:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/08/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-08.md","source":"@site/blog/2023-07-08.md","title":"Choosing a New, Family-Friendly Name for this project!","description":"Hello, everyone!","date":"2023-07-08T00:00:00.000Z","tags":[{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"gaming platform","permalink":"/blog/tags/gaming-platform"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"new name","permalink":"/blog/tags/new-name"},{"inline":true,"label":"family-friendly","permalink":"/blog/tags/family-friendly"},{"inline":true,"label":"poll","permalink":"/blog/tags/poll"},{"inline":true,"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"inclusivity","permalink":"/blog/tags/inclusivity"},{"inline":true,"label":"user participation","permalink":"/blog/tags/user-participation"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"decision-making","permalink":"/blog/tags/decision-making"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"platform values","permalink":"/blog/tags/platform-values"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"future development","permalink":"/blog/tags/future-development"}],"readingTime":1.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Choosing a New, Family-Friendly Name for this project!","authors":["alfagun74"],"tags":["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},"unlisted":false,"prevItem":{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/"},"nextItem":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","permalink":"/blog/2023/07/01/"}}')}}]); \ No newline at end of file diff --git a/assets/js/ba3af7ad.82300781.js b/assets/js/ba3af7ad.82300781.js deleted file mode 100644 index 821fb496d..000000000 --- a/assets/js/ba3af7ad.82300781.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1814],{5040:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>m,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>s});var l=n(2676),t=n(8358);const i={title:"Choosing a New, Family-Friendly Name for this project!",authors:["alfagun74"],tags:["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},o=void 0,r={permalink:"/blog/2023/07/08/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-08.md",source:"@site/blog/2023-07-08.md",title:"Choosing a New, Family-Friendly Name for this project!",description:"Hello, everyone!",date:"2023-07-08T00:00:00.000Z",tags:[{inline:!0,label:"source-available",permalink:"/blog/tags/source-available"},{inline:!0,label:"gaming platform",permalink:"/blog/tags/gaming-platform"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"new name",permalink:"/blog/tags/new-name"},{inline:!0,label:"family-friendly",permalink:"/blog/tags/family-friendly"},{inline:!0,label:"poll",permalink:"/blog/tags/poll"},{inline:!0,label:"AI-generated names",permalink:"/blog/tags/ai-generated-names"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"inclusivity",permalink:"/blog/tags/inclusivity"},{inline:!0,label:"user participation",permalink:"/blog/tags/user-participation"},{inline:!0,label:"announcement",permalink:"/blog/tags/announcement"},{inline:!0,label:"decision-making",permalink:"/blog/tags/decision-making"},{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"platform values",permalink:"/blog/tags/platform-values"},{inline:!0,label:"voting",permalink:"/blog/tags/voting"},{inline:!0,label:"future development",permalink:"/blog/tags/future-development"}],readingTime:1.26,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Choosing a New, Family-Friendly Name for this project!",authors:["alfagun74"],tags:["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},unlisted:!1,prevItem:{title:"Battling Harassment and Trolls in Our App Community",permalink:"/blog/2023/07/09/"},nextItem:{title:"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games",permalink:"/blog/2023/07/01/"}},m={authorsImageUrls:[void 0]},s=[];function g(e){const a={a:"a",p:"p",...(0,t.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.p,{children:"Hello, everyone!"}),"\n",(0,l.jsxs)(a.p,{children:["We have an important announcement to share about our ",(0,l.jsx)(a.a,{href:"https://en.wikipedia.org/wiki/Source-available_software",children:"source-available"})," gaming platform, project. We have listened to your feedback and concerns, and now we need your help in choosing a new, family-friendly name that better reflects our platform's values."]})]})}function u(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,l.jsx)(a,{...e,children:(0,l.jsx)(g,{...e})}):g(e)}},8358:(e,a,n)=>{n.d(a,{Z:()=>r,a:()=>o});var l=n(5271);const t={},i=l.createContext(t);function o(e){const a=l.useContext(i);return l.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),l.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba57e113.a3d24f2c.js b/assets/js/ba57e113.a3d24f2c.js new file mode 100644 index 000000000..6cc12e31e --- /dev/null +++ b/assets/js/ba57e113.a3d24f2c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7766],{2746:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"license-contribute","title":"Licensing and Contributions","description":"License","source":"@site/docs/license-contribute.md","sourceDirName":".","slug":"/license-contribute","permalink":"/docs/license-contribute","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/license-contribute.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":97,"frontMatter":{"sidebar_position":97},"sidebar":"docs","previous":{"title":"Client APIs","permalink":"/docs/gamevault-plus/client-apis"},"next":{"title":"Troubleshooting","permalink":"/docs/troubleshooting"}}');var o=n(6070),r=n(8591);const s={sidebar_position:97},a="Licensing and Contributions",l={},c=[{value:"License",id:"license",level:2},{value:"Why is GameVault not open-source?",id:"why-is-gamevault-not-open-source",level:3},{value:"Contributing to GameVault",id:"contributing-to-gamevault",level:2},{value:"Publishing Adaptations of GameVault",id:"publishing-adaptations-of-gamevault",level:2},{value:"Community Forks",id:"community-forks",level:2},{value:"gamevault-app",id:"gamevault-app",level:3},{value:"gamevault-backend",id:"gamevault-backend",level:3},{value:"Contributors to this Documentation",id:"contributors-to-this-documentation",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"licensing-and-contributions",children:"Licensing and Contributions"})}),"\n",(0,o.jsx)(t.h2,{id:"license",children:"License"}),"\n",(0,o.jsxs)(t.p,{children:["GameVault is licensed under the ",(0,o.jsx)(t.a,{href:"https://creativecommons.org/licenses/by-nc-sa/4.0/",children:"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"})," with the exception of the some components, like extensions and plugins."]}),"\n",(0,o.jsx)(t.p,{children:"This means you are free to use, adapt, and share the work as long as you give appropriate credit, do not use it for commercial purposes, and distribute any derivative works under the same license."}),"\n",(0,o.jsxs)(t.p,{children:["This also means that ",(0,o.jsx)(t.strong,{children:"GameVault is not considered open-source"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"why-is-gamevault-not-open-source",children:"Why is GameVault not open-source?"}),"\n",(0,o.jsxs)(t.p,{children:['While GameVault is often confused with open-source software, it falls under the category of "source-available" software, providing access to its code for exploration and modification without fully meeting the criteria of open source. This decision is made to balance transparency and protection against unauthorized commercial exploitation, ensuring sustainability and revenue generation to support its development. See ',(0,o.jsx)(t.a,{href:"/blog/2023/07/13",children:"here"})," for more details."]}),"\n",(0,o.jsx)(t.h2,{id:"contributing-to-gamevault",children:"Contributing to GameVault"}),"\n",(0,o.jsx)(t.p,{children:"Everybody can contribute to GameVault."}),"\n",(0,o.jsx)(t.p,{children:"We welcome all contributions, whether it's a comment, a feature request, a bug report, or any other input. Share your thoughts on your blog, news article, forum, social media (e.g., Twitter, Facebook, Instagram), or online communities and discussion boards. Engage with others through videos or podcasts, create content to show how GameVault has positively affected your life, or write a detailed review highlighting its benefits. Your words and actions will bring us joy."}),"\n",(0,o.jsx)(t.p,{children:"Besides rating GameVault on the Microsoft Store or recommending it to a friend, you can also spread the word through different channels. Take part in relevant technology conferences or events and mention GameVault during discussions or presentations. Collaborate with fellow developers or tech enthusiasts in online coding communities like GitHub, Stack Overflow, or Reddit to promote GameVault and demonstrate its features."}),"\n",(0,o.jsx)(t.p,{children:"As we constantly strive to enhance GameVault's performance and features, your assistance is crucial. If you're a developer, please consider opening a pull request on our GitHub repository to contribute directly to the codebase. Alternatively, if you encounter any issues or have suggestions, feel free to create an issue and provide detailed feedback. Your expertise and insights will greatly support our ongoing development efforts."}),"\n",(0,o.jsx)(t.p,{children:"Before contributing any code, please read and accept the terms outlined in the CONTRIBUTING.md file of each project you want to contribute to. These terms include recognizing Phalcode as the owner of your contribution and transferring all rights and responsibilities to us. This ensures everything is legally clear and simple for everyone involved. This also means we can monetize your contribution, so that we can keep this project alive."}),"\n",(0,o.jsx)(t.h2,{id:"publishing-adaptations-of-gamevault",children:"Publishing Adaptations of GameVault"}),"\n",(0,o.jsx)(t.p,{children:"Commercial adaptations of GameVault are not permitted due to licensing restrictions. However, we encourage the creation of derivatives for non-commercial projects under certain conditions."}),"\n",(0,o.jsx)(t.p,{children:"GameVault is developed commercially, and any third-party software using our trademarks GameVault\u2122 or Phalcode\u2122 without our consent is unauthorized. We take measures to protect our intellectual property rights and brand integrity, preventing any unauthorized products from being associated with us."}),"\n",(0,o.jsx)(t.p,{children:"To maintain our reputation and protect our customers' interests, it's essential for third-party developers to avoid creating misleading products. Users may mistakenly believe these products are endorsed or developed by us, posing potential issues for safety and support. As a German GbR (Partnership), we hold full personal liability for our products, underscoring the need to retain control over our brand and software."}),"\n",(0,o.jsx)(t.p,{children:'We welcome creativity from third-party developers, encouraging them to create derivatives with distinct names like "GameVaulTux" or "GameVault Snake Edition". However, it\'s crucial to clearly indicate these as unofficial versions in the product description.'}),"\n",(0,o.jsx)(t.p,{children:"For those intending to publish an official product under our brand, acknowledgment of Phalcode as the sole rights holder and the transfer of all associated liabilities, rights, and responsibilities to us through a formal agreement is required. This aligns with our approach to handling contributions, ensuring clarity and legal compliance for all parties involved."}),"\n",(0,o.jsx)(t.h2,{id:"community-forks",children:"Community Forks"}),"\n",(0,o.jsx)(t.p,{children:"Here you can find an incomplete list of community-driven forks of our Projects. You can add your fork here by submitting a pull-request."}),"\n",(0,o.jsx)(t.h3,{id:"gamevault-app",children:"gamevault-app"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Github Repository"}),(0,o.jsx)(t.th,{children:"Downloads"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"-"}),(0,o.jsx)(t.td,{children:"-"}),(0,o.jsx)(t.td,{children:"-"})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"gamevault-backend",children:"gamevault-backend"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Github Repository"}),(0,o.jsx)(t.th,{children:"Container Image"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"-"}),(0,o.jsx)(t.td,{children:"-"}),(0,o.jsx)(t.td,{children:"-"})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"contributors-to-this-documentation",children:"Contributors to this Documentation"}),"\n",(0,o.jsx)(t.p,{children:"If you contributed to these docs, feel free to append your github username to the list below."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"@Alfagun74"}),"\n",(0,o.jsx)(t.li,{children:"@Yelo420"}),"\n",(0,o.jsx)(t.li,{children:"@46620"}),"\n",(0,o.jsx)(t.li,{children:"@xstar97"}),"\n",(0,o.jsx)(t.li,{children:"@Ronald-Diemicke"}),"\n",(0,o.jsx)(t.li,{children:"@FletcherAU"}),"\n",(0,o.jsx)(t.li,{children:"@Toylerrr"}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>a});var i=n(758);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba57e113.a8c89eee.js b/assets/js/ba57e113.a8c89eee.js deleted file mode 100644 index 952395ea7..000000000 --- a/assets/js/ba57e113.a8c89eee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5948],{2826:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=n(2676),o=n(8358);const r={sidebar_position:97},s="Licensing and Contributions",a={id:"license-contribute",title:"Licensing and Contributions",description:"License",source:"@site/docs/license-contribute.md",sourceDirName:".",slug:"/license-contribute",permalink:"/docs/license-contribute",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/license-contribute.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:97,frontMatter:{sidebar_position:97},sidebar:"docs",previous:{title:"Client APIs",permalink:"/docs/gamevault-plus/client-apis"},next:{title:"Troubleshooting",permalink:"/docs/troubleshooting"}},l={},c=[{value:"License",id:"license",level:2},{value:"Why is GameVault not open-source?",id:"why-is-gamevault-not-open-source",level:3},{value:"Contributing to GameVault",id:"contributing-to-gamevault",level:2},{value:"Publishing Adaptations of GameVault",id:"publishing-adaptations-of-gamevault",level:2},{value:"Community Forks",id:"community-forks",level:2},{value:"gamevault-app",id:"gamevault-app",level:3},{value:"gamevault-backend",id:"gamevault-backend",level:3},{value:"Contributors to this Documentation",id:"contributors-to-this-documentation",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"licensing-and-contributions",children:"Licensing and Contributions"})}),"\n",(0,i.jsx)(t.h2,{id:"license",children:"License"}),"\n",(0,i.jsxs)(t.p,{children:["GameVault is licensed under the ",(0,i.jsx)(t.a,{href:"https://creativecommons.org/licenses/by-nc-sa/4.0/",children:"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"})," with the exception of the some components, like extensions and plugins."]}),"\n",(0,i.jsx)(t.p,{children:"This means you are free to use, adapt, and share the work as long as you give appropriate credit, do not use it for commercial purposes, and distribute any derivative works under the same license."}),"\n",(0,i.jsxs)(t.p,{children:["This also means that ",(0,i.jsx)(t.strong,{children:"GameVault is not considered open-source"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"why-is-gamevault-not-open-source",children:"Why is GameVault not open-source?"}),"\n",(0,i.jsxs)(t.p,{children:['While GameVault is often confused with open-source software, it falls under the category of "source-available" software, providing access to its code for exploration and modification without fully meeting the criteria of open source. This decision is made to balance transparency and protection against unauthorized commercial exploitation, ensuring sustainability and revenue generation to support its development. See ',(0,i.jsx)(t.a,{href:"/blog/2023/07/13",children:"here"})," for more details."]}),"\n",(0,i.jsx)(t.h2,{id:"contributing-to-gamevault",children:"Contributing to GameVault"}),"\n",(0,i.jsx)(t.p,{children:"Everybody can contribute to GameVault."}),"\n",(0,i.jsx)(t.p,{children:"We welcome all contributions, whether it's a comment, a feature request, a bug report, or any other input. Share your thoughts on your blog, news article, forum, social media (e.g., Twitter, Facebook, Instagram), or online communities and discussion boards. Engage with others through videos or podcasts, create content to show how GameVault has positively affected your life, or write a detailed review highlighting its benefits. Your words and actions will bring us joy."}),"\n",(0,i.jsx)(t.p,{children:"Besides rating GameVault on the Microsoft Store or recommending it to a friend, you can also spread the word through different channels. Take part in relevant technology conferences or events and mention GameVault during discussions or presentations. Collaborate with fellow developers or tech enthusiasts in online coding communities like GitHub, Stack Overflow, or Reddit to promote GameVault and demonstrate its features."}),"\n",(0,i.jsx)(t.p,{children:"As we constantly strive to enhance GameVault's performance and features, your assistance is crucial. If you're a developer, please consider opening a pull request on our GitHub repository to contribute directly to the codebase. Alternatively, if you encounter any issues or have suggestions, feel free to create an issue and provide detailed feedback. Your expertise and insights will greatly support our ongoing development efforts."}),"\n",(0,i.jsx)(t.p,{children:"Before contributing any code, please read and accept the terms outlined in the CONTRIBUTING.md file of each project you want to contribute to. These terms include recognizing Phalcode as the owner of your contribution and transferring all rights and responsibilities to us. This ensures everything is legally clear and simple for everyone involved. This also means we can monetize your contribution, so that we can keep this project alive."}),"\n",(0,i.jsx)(t.h2,{id:"publishing-adaptations-of-gamevault",children:"Publishing Adaptations of GameVault"}),"\n",(0,i.jsx)(t.p,{children:"Commercial adaptations of GameVault are not permitted due to licensing restrictions. However, we encourage the creation of derivatives for non-commercial projects under certain conditions."}),"\n",(0,i.jsx)(t.p,{children:"GameVault is developed commercially, and any third-party software using our trademarks GameVault\u2122 or Phalcode\u2122 without our consent is unauthorized. We take measures to protect our intellectual property rights and brand integrity, preventing any unauthorized products from being associated with us."}),"\n",(0,i.jsx)(t.p,{children:"To maintain our reputation and protect our customers' interests, it's essential for third-party developers to avoid creating misleading products. Users may mistakenly believe these products are endorsed or developed by us, posing potential issues for safety and support. As a German GbR (Partnership), we hold full personal liability for our products, underscoring the need to retain control over our brand and software."}),"\n",(0,i.jsx)(t.p,{children:'We welcome creativity from third-party developers, encouraging them to create derivatives with distinct names like "GameVaulTux" or "GameVault Snake Edition". However, it\'s crucial to clearly indicate these as unofficial versions in the product description.'}),"\n",(0,i.jsx)(t.p,{children:"For those intending to publish an official product under our brand, acknowledgment of Phalcode as the sole rights holder and the transfer of all associated liabilities, rights, and responsibilities to us through a formal agreement is required. This aligns with our approach to handling contributions, ensuring clarity and legal compliance for all parties involved."}),"\n",(0,i.jsx)(t.h2,{id:"community-forks",children:"Community Forks"}),"\n",(0,i.jsx)(t.p,{children:"Here you can find an incomplete list of community-driven forks of our Projects. You can add your fork here by submitting a pull-request."}),"\n",(0,i.jsx)(t.h3,{id:"gamevault-app",children:"gamevault-app"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Github Repository"}),(0,i.jsx)(t.th,{children:"Downloads"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"-"}),(0,i.jsx)(t.td,{children:"-"}),(0,i.jsx)(t.td,{children:"-"})]})})]}),"\n",(0,i.jsx)(t.h3,{id:"gamevault-backend",children:"gamevault-backend"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Github Repository"}),(0,i.jsx)(t.th,{children:"Container Image"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"-"}),(0,i.jsx)(t.td,{children:"-"}),(0,i.jsx)(t.td,{children:"-"})]})})]}),"\n",(0,i.jsx)(t.h2,{id:"contributors-to-this-documentation",children:"Contributors to this Documentation"}),"\n",(0,i.jsx)(t.p,{children:"If you contributed to these docs, feel free to append your github username to the list below."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"@Alfagun74"}),"\n",(0,i.jsx)(t.li,{children:"@Yelo420"}),"\n",(0,i.jsx)(t.li,{children:"@46620"}),"\n",(0,i.jsx)(t.li,{children:"@xstar97"}),"\n",(0,i.jsx)(t.li,{children:"@Ronald-Diemicke"}),"\n",(0,i.jsx)(t.li,{children:"@FletcherAU"}),"\n",(0,i.jsx)(t.li,{children:"@Toylerrr"}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>s});var i=n(5271);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bb12dd4d.2d4ebc9a.js b/assets/js/bb12dd4d.1d4186d6.js similarity index 85% rename from assets/js/bb12dd4d.2d4ebc9a.js rename to assets/js/bb12dd4d.1d4186d6.js index 6b80eff44..04026bea4 100644 --- a/assets/js/bb12dd4d.2d4ebc9a.js +++ b/assets/js/bb12dd4d.1d4186d6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4286],{1988:s=>{s.exports=JSON.parse('{"tag":{"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/logo-concept-discussion","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5774],{5990:s=>{s.exports=JSON.parse('{"tag":{"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/logo-concept-discussion","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/bc0aa6af.65ec7d7b.js b/assets/js/bc0aa6af.5ae8d76b.js similarity index 84% rename from assets/js/bc0aa6af.65ec7d7b.js rename to assets/js/bc0aa6af.5ae8d76b.js index db7a2bfe9..c2092a354 100644 --- a/assets/js/bc0aa6af.65ec7d7b.js +++ b/assets/js/bc0aa6af.5ae8d76b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8404],{3389:a=>{a.exports=JSON.parse('{"tag":{"label":"plugin system","permalink":"/blog/tags/plugin-system","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/plugin-system","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9155],{5251:a=>{a.exports=JSON.parse('{"tag":{"label":"plugin system","permalink":"/blog/tags/plugin-system","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/plugin-system","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/bcc2422e.ec947659.js b/assets/js/bcc2422e.ec947659.js new file mode 100644 index 000000000..d42a83175 --- /dev/null +++ b/assets/js/bcc2422e.ec947659.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1312],{6299:e=>{e.exports=JSON.parse('{"tag":{"label":"UI Redesign","permalink":"/blog/tags/ui-redesign","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/ui-redesign","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/bdf26d57.9e4d46f1.js b/assets/js/bdf26d57.9e4d46f1.js deleted file mode 100644 index 8cb3c9b81..000000000 --- a/assets/js/bdf26d57.9e4d46f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4452],{3806:a=>{a.exports=JSON.parse('{"tag":{"label":"collaboration","permalink":"/blog/tags/collaboration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/collaboration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/bdf26d57.e3d3fb7f.js b/assets/js/bdf26d57.e3d3fb7f.js new file mode 100644 index 000000000..9b81feda5 --- /dev/null +++ b/assets/js/bdf26d57.e3d3fb7f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[671],{2166:a=>{a.exports=JSON.parse('{"tag":{"label":"collaboration","permalink":"/blog/tags/collaboration","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/collaboration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c15d9823.91f18004.js b/assets/js/c15d9823.cf1dab78.js similarity index 78% rename from assets/js/c15d9823.91f18004.js rename to assets/js/c15d9823.cf1dab78.js index 16ff68616..de9fd6304 100644 --- a/assets/js/c15d9823.91f18004.js +++ b/assets/js/c15d9823.cf1dab78.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6642],{2506:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":16,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8146],{9328:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":16,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c332f8df.2e78d6b5.js b/assets/js/c332f8df.2e78d6b5.js new file mode 100644 index 000000000..6718ea47e --- /dev/null +++ b/assets/js/c332f8df.2e78d6b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[482],{7861:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var i=t(4502),a=t(6070),o=t(8591);const r={title:"Quick Migration Update and new Logo",authors:["alfagun74"],tags:["name migration progress","backend application migration","documentation migration","domain acquisition","Subreddit migration","Lemmy community","Client Application update","testing","new logo","speculation","Discord channel","migration finalization"]},l=void 0,s={authorsImageUrls:[void 0]},c=[];function d(e){const n={a:"a",code:"code",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"Hey guys,"}),"\n",(0,a.jsx)(n.p,{children:"We have a brief update on the progress of the name migration."}),"\n",(0,a.jsxs)(n.p,{children:["We've successfully completed the migration of the backend application, which is now accessible as ",(0,a.jsx)(n.code,{children:"gamevault-backend"}),". "]}),"\n",(0,a.jsx)(n.p,{children:"Furthermore, we've migrated the documentation and acquired this domain gamevau.lt. We've set up redirects for our previous domain and the demo server as well."}),"\n",(0,a.jsxs)(n.p,{children:["Lastly we migrated our Subreddit to ",(0,a.jsx)(n.a,{href:"https://reddit.com/r/Phalcode",children:"r/Phalcode"})," and opened up a new community on ",(0,a.jsx)(n.a,{href:"https://lemmy.world/c/phalcode",children:"Lemmy"}),". All further Updates and discussions regarding GameVault can be found there."]}),"\n",(0,a.jsx)(n.p,{children:"We're nearly finished, you might say."}),"\n",(0,a.jsx)(n.p,{children:"The only remaining task is the Client Application. We're actively working on it and currently testing the application on our developer edition. Soon, you'll be able to seamlessly update your client with the new name and appearance."}),"\n",(0,a.jsx)(n.p,{children:"In the meantime, our graphic designer has crafted a fresh logo for our new name, GameVault."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"logo",src:t(5364).A+"",width:"1000",height:"103"})}),"\n",(0,a.jsx)(n.p,{children:"To make good use of your time while the migrations are in progress, what do you speculate the new logo represents?"}),"\n",(0,a.jsxs)(n.p,{children:["Share your theories in gamevaults #chat channel on ",(0,a.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"discord"}),"! We'll reveal the answer and shoutout the winner(s) in the next blog post, once the migration is finalized!"]}),"\n",(0,a.jsx)(n.p,{children:"Until then \u270c\ufe0f"})]})}function m(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5364:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/logo-text-and-image-sbs-6a7a4b169bd1cf62f643469e715ae759.png"},8591:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var i=t(758);const a={},o=i.createContext(a);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(o.Provider,{value:n},e.children)}},4502:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/19/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-19.md","source":"@site/blog/2023-07-19.md","title":"Quick Migration Update and new Logo","description":"Hey guys,","date":"2023-07-19T00:00:00.000Z","tags":[{"inline":true,"label":"name migration progress","permalink":"/blog/tags/name-migration-progress"},{"inline":true,"label":"backend application migration","permalink":"/blog/tags/backend-application-migration"},{"inline":true,"label":"documentation migration","permalink":"/blog/tags/documentation-migration"},{"inline":true,"label":"domain acquisition","permalink":"/blog/tags/domain-acquisition"},{"inline":true,"label":"Subreddit migration","permalink":"/blog/tags/subreddit-migration"},{"inline":true,"label":"Lemmy community","permalink":"/blog/tags/lemmy-community"},{"inline":true,"label":"Client Application update","permalink":"/blog/tags/client-application-update"},{"inline":true,"label":"testing","permalink":"/blog/tags/testing"},{"inline":true,"label":"new logo","permalink":"/blog/tags/new-logo"},{"inline":true,"label":"speculation","permalink":"/blog/tags/speculation"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"},{"inline":true,"label":"migration finalization","permalink":"/blog/tags/migration-finalization"}],"readingTime":0.965,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Quick Migration Update and new Logo","authors":["alfagun74"],"tags":["name migration progress","backend application migration","documentation migration","domain acquisition","Subreddit migration","Lemmy community","Client Application update","testing","new logo","speculation","Discord channel","migration finalization"]},"unlisted":false,"prevItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"},"nextItem":{"title":"A New Name","permalink":"/blog/2023/07/15/"}}')}}]); \ No newline at end of file diff --git a/assets/js/c332f8df.d52fc2ac.js b/assets/js/c332f8df.d52fc2ac.js deleted file mode 100644 index 62a62cd84..000000000 --- a/assets/js/c332f8df.d52fc2ac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8258],{8314:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var t=i(2676),a=i(8358);const o={title:"Quick Migration Update and new Logo",authors:["alfagun74"],tags:["name migration progress","backend application migration","documentation migration","domain acquisition","Subreddit migration","Lemmy community","Client Application update","testing","new logo","speculation","Discord channel","migration finalization"]},l=void 0,r={permalink:"/blog/2023/07/19/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-19.md",source:"@site/blog/2023-07-19.md",title:"Quick Migration Update and new Logo",description:"Hey guys,",date:"2023-07-19T00:00:00.000Z",tags:[{inline:!0,label:"name migration progress",permalink:"/blog/tags/name-migration-progress"},{inline:!0,label:"backend application migration",permalink:"/blog/tags/backend-application-migration"},{inline:!0,label:"documentation migration",permalink:"/blog/tags/documentation-migration"},{inline:!0,label:"domain acquisition",permalink:"/blog/tags/domain-acquisition"},{inline:!0,label:"Subreddit migration",permalink:"/blog/tags/subreddit-migration"},{inline:!0,label:"Lemmy community",permalink:"/blog/tags/lemmy-community"},{inline:!0,label:"Client Application update",permalink:"/blog/tags/client-application-update"},{inline:!0,label:"testing",permalink:"/blog/tags/testing"},{inline:!0,label:"new logo",permalink:"/blog/tags/new-logo"},{inline:!0,label:"speculation",permalink:"/blog/tags/speculation"},{inline:!0,label:"Discord channel",permalink:"/blog/tags/discord-channel"},{inline:!0,label:"migration finalization",permalink:"/blog/tags/migration-finalization"}],readingTime:.965,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Quick Migration Update and new Logo",authors:["alfagun74"],tags:["name migration progress","backend application migration","documentation migration","domain acquisition","Subreddit migration","Lemmy community","Client Application update","testing","new logo","speculation","Discord channel","migration finalization"]},unlisted:!1,prevItem:{title:"The Migrations are finally completed",permalink:"/blog/2023/07/20/"},nextItem:{title:"A New Name",permalink:"/blog/2023/07/15/"}},s={authorsImageUrls:[void 0]},c=[];function d(e){const n={a:"a",code:"code",img:"img",p:"p",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Hey guys,"}),"\n",(0,t.jsx)(n.p,{children:"We have a brief update on the progress of the name migration."}),"\n",(0,t.jsxs)(n.p,{children:["We've successfully completed the migration of the backend application, which is now accessible as ",(0,t.jsx)(n.code,{children:"gamevault-backend"}),". "]}),"\n",(0,t.jsx)(n.p,{children:"Furthermore, we've migrated the documentation and acquired this domain gamevau.lt. We've set up redirects for our previous domain and the demo server as well."}),"\n",(0,t.jsxs)(n.p,{children:["Lastly we migrated our Subreddit to ",(0,t.jsx)(n.a,{href:"https://reddit.com/r/Phalcode",children:"r/Phalcode"})," and opened up a new community on ",(0,t.jsx)(n.a,{href:"https://lemmy.world/c/phalcode",children:"Lemmy"}),". All further Updates and discussions regarding GameVault can be found there."]}),"\n",(0,t.jsx)(n.p,{children:"We're nearly finished, you might say."}),"\n",(0,t.jsx)(n.p,{children:"The only remaining task is the Client Application. We're actively working on it and currently testing the application on our developer edition. Soon, you'll be able to seamlessly update your client with the new name and appearance."}),"\n",(0,t.jsx)(n.p,{children:"In the meantime, our graphic designer has crafted a fresh logo for our new name, GameVault."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"logo",src:i(4474).Z+"",width:"1000",height:"103"})}),"\n",(0,t.jsx)(n.p,{children:"To make good use of your time while the migrations are in progress, what do you speculate the new logo represents?"}),"\n",(0,t.jsxs)(n.p,{children:["Share your theories in gamevaults #chat channel on ",(0,t.jsx)(n.a,{href:"https://discord.gg/NEdNen2dSu",children:"discord"}),"! We'll reveal the answer and shoutout the winner(s) in the next blog post, once the migration is finalized!"]}),"\n",(0,t.jsx)(n.p,{children:"Until then \u270c\ufe0f"})]})}function m(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},4474:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/logo-text-and-image-sbs-6a7a4b169bd1cf62f643469e715ae759.png"},8358:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>l});var t=i(5271);const a={},o=t.createContext(a);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.5bde9f5e.js b/assets/js/c4f5d8e4.5bde9f5e.js deleted file mode 100644 index f3638c68b..000000000 --- a/assets/js/c4f5d8e4.5bde9f5e.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4195],{7703:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>q});var n=a(6172),i=a(4814),o=a(5271);const r={features:"features_t9lD"},s=a.p+"assets/images/admin-0ad4037b89a248bffa4e939d647d326c.png",l=a.p+"assets/images/community-717286c80fce866c158ab595629a937a.png",c=a.p+"assets/images/game-45374cc5b999ec17b1ca3578f8ff926b.png",u=a.p+"assets/images/github-0cf1393534e30fd4eb2411670f3e9234.png",d=a.p+"assets/images/installation-318f17d2cf4b9f87ccafd406a2bdb009.png",h=a.p+"assets/images/library-afce4846b08b60cecca986a39b1fa331.png",m=a.p+"assets/medias/admin-3adfe380e11d3351a3ba7eb4e25ce685.mp4",p=a.p+"assets/medias/community-c59d264ef301a24c508f40a02340fd3c.mp4",f=a.p+"assets/medias/game-08b3dace3b1757584d3a82bab9bc7f93.mp4",g=a.p+"assets/medias/installation-b349635775bda338fd4babf0d8519e2c.mp4",v=a.p+"assets/medias/library-82c4106d4da1f0466e2995c53b6df7c0.mp4";var x=a(2676);const b=[{title:"\ud83c\udfae Browse Your Games",img:h,video:v,description:(0,x.jsx)(x.Fragment,{children:"Browse your server's beautifully organized library to download, install and play your collection of video games of all kinds!"})},{title:"\ud83d\udc6f Build Your Community",img:s,video:m,description:(0,x.jsx)(x.Fragment,{children:"Share your platform with your friends and family so they can enjoy your library, too. Administrate your users and games."})},{title:"\u23f1\ufe0f Track Your Progress",img:l,video:p,description:(0,x.jsx)(x.Fragment,{children:"See how long you or your friends have been playing a game, find out what they are and keep track of what you've already completed or abandoned."})},{title:"\ud83d\udd0e Automatic Metadata Enrichment",img:c,video:f,description:(0,x.jsx)(x.Fragment,{children:"GameVault automatically enriches your game with all the juicy information and and images from the largest video game database."})},{title:"\ud83d\udce6 Easy To Use",img:d,video:g,description:(0,x.jsxs)("div",{children:["There\u2019s no need to compile any code! The app is readily available in the"," ",(0,x.jsx)("a",{href:"https://www.microsoft.com/store/apps/9PCKDV76GL75",children:"Microsoft Store"}),". Plus, ","",(0,x.jsx)("a",{href:"/docs/client-docs/how-to-use.md#2-installing-the-game",children:"installing games"})," and ",(0,x.jsx)("a",{href:"/docs/server-docs/setup",children:"setting up a server"})," is equally straightforward!"]})},{title:"\ud83d\udc65 Join The Movement",img:u,description:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)("a",{target:"_blank",href:"https://discord.gg/NEdNen2dSu",children:"Join our growing community"})," ",", star us on GitHub, or even ",(0,x.jsx)("a",{href:"/docs/contribute",children:"contribute"})," ","to our source-available project! Everyone can help!"]})}];function y(e){let{title:t,img:a,video:n,description:o}=e;return(0,x.jsxs)("div",{className:(0,i.Z)("col col--4"),children:[(0,x.jsx)("div",{className:"text--center",children:n?(0,x.jsx)("video",{className:"w-full max-w-screen-sm rounded-xl",muted:!0,autoPlay:!0,controls:!0,loop:!0,src:n}):(0,x.jsx)("img",{className:"rounded-xl",alt:t,src:a})}),(0,x.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,x.jsx)("h3",{children:t}),(0,x.jsx)("p",{children:o})]})]})}function w(){return(0,x.jsx)("section",{className:r.features,children:(0,x.jsx)("div",{className:"container",children:(0,x.jsx)("div",{className:"row",children:b.map(((e,t)=>(0,x.jsx)(y,{...e},t)))})})})}var j=a(3557),N=a(1714);function k(e){let{className:t,...a}=e;return(0,x.jsx)("div",{className:(0,i.Z)("mx-auto max-w-7xl px-4 sm:px-6 lg:px-8",t),...a})}var E=a(6527);const I=[[{question:"Does GameVault combine my gaming platforms in one place?",answer:"No, GameVault is not for combining games from different platforms into one app. Rather, it's for managing your own gaming platform with your own game files hosted on your server."},{question:"Is GameVault open-source?",answer:"No, GameVault is source-available, meaning the code is open for you to explore and modify for personal use. However, you may not use it for commercial purposes."},{question:"Is GameVault a tool for piracy?",answer:"No, it isn't. GameVault is designed to manage legally obtained DRM-free games. While it can technically be used with illegally obtained games, we do not endorse or support piracy. We encourage users to comply with copyright laws. Unlawful use is strictly improper and unauthorized."}],[{question:"Does GameVault work with games from Steam, Epic Games, Microsoft, etc.?",answer:"Usually not. GameVault is made for games you own and only works with DRM-free games, either pure game files or installers. Most platforms use DRM, but there are exceptions like GOG and Humble Bundle that don\u2019t."},{question:"Is there a native client for Mac or Linux?",answer:"No, apart from emulation or community-maintained clients, there is currently no native Linux or Mac GameVault client application."},{question:"Does GameVault have anything to do with gambling?",answer:"No, absolutely not. There's just a gambling app with a similar name on the market. If you're struggling with gambling addiction, please seek help."}],[{question:"Does GameVault stream games?",answer:"No, GameVault has nothing to do with streaming. It's simply an app to organize and browse your game library in a Steam-like experience and share it with your community."},{question:"Does GameVault cost any money?",answer:"No, the core features of GameVault are and will always be free. However, we do offer a paid GameVault+ subscription for some additional extra features, which you can subscribe to if you'd like to continuously support our work."},{question:"What was the former name of GameVault?",answer:"The first rule of GameVault is: you do not talk about the former name of GameVault."}]];function S(){return(0,x.jsx)("section",{id:"faq","aria-labelledby":"faq-title",className:"relative overflow-hidden py-16",children:(0,x.jsxs)(k,{className:"relative",children:[(0,x.jsxs)("div",{className:"mx-auto lg:mx-0",children:[(0,x.jsx)("h2",{id:"faq-title",className:"font-display text-3xl tracking-tight sm:text-4xl",children:"Frequently asked questions"}),(0,x.jsxs)("p",{className:"mt-4 text-lg tracking-tight text-text-light",children:["If you can\u2019t find what you\u2019re looking for here, check out the"," ",(0,x.jsx)(E.Z,{href:"https://gamevau.lt/docs/intro",children:"Docs"})," or contact us via"," ",(0,x.jsx)(E.Z,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),","," ",(0,x.jsx)(E.Z,{href:"https://github.com/Phalcode/gamevault-app/discussions",children:"GitHub"}),", or ",(0,x.jsx)(E.Z,{href:"mailto:contact@phalco.de",children:"Email"})]})]}),(0,x.jsx)("ul",{className:"list-none mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 lg:max-w-none lg:grid-cols-3",children:I.map(((e,t)=>(0,x.jsx)("li",{children:(0,x.jsx)("ul",{className:"list-none flex flex-col gap-y-8",children:e.map(((e,t)=>(0,x.jsxs)("li",{children:[(0,x.jsx)("h3",{className:"font-display text-lg leading-7",children:e.question}),(0,x.jsx)("p",{className:"mt-4 text-sm text-text-light",children:e.answer})]},t)))})},t)))})]})})}var C=a(507),L=a.n(C);const T={solid:"group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 !no-underline",outline:"group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none"},V={solid:{primary:"bg-primary-default text-white hover:text-white hover:bg-primary-darker active:bg-primary-darkest focus-visible:outline-primary-darkest"}};function P(e){let{className:t,...a}=e;a.variant??="solid",a.color??="primary";const n=(o=a.variant,r=a.color,"outline"===o?V.outline?.[r]:"solid"===o?V.solid?.[r]:void 0);var o,r;return t=(0,i.Z)(T[a.variant],n,t),console.log(t),void 0===a.href?(0,x.jsx)("button",{className:t,...a}):(0,x.jsx)(E.Z,{className:t,...a})}P.propTypes={href:L().string,className:L().string,variant:L().oneOf(["solid","outline"]),color:L().oneOf(["primary"])};const O=e=>{let{className:t,options:a,...n}=e;const[i,r]=(0,o.useState)(!1),s=(0,o.useRef)(null);return(0,o.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&r(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)}),[]),(0,x.jsxs)("span",{ref:s,className:"relative inline-block text-left",children:[(0,x.jsx)(P,{className:t+" w-full",...n,onClick:()=>r(!i)}),i&&(0,x.jsx)("div",{className:"absolute right-0 z-10 mt-2 w-full origin-top-right rounded-md bg-background-dark shadow-lg ring-1 ring-text-light",role:"menu","aria-orientation":"vertical",children:(0,x.jsx)("div",{className:"py-1",role:"none",children:a.map((e=>(0,x.jsx)(E.Z,{href:e.link,target:"_blank",className:"font-bold hover:no-underline block px-4 py-2 text-sm hover:bg-background-default text-text-default","aria-label":e.label,children:e.label},e.label)))})})]})};O.propTypes={className:L().string,options:L().arrayOf(L().shape({label:L().string.isRequired,link:L().string.isRequired})).isRequired};const G=O;function _(){const[e,t]=(0,o.useState)(!1);return(0,x.jsxs)(k,{className:"pb-16 pt-20 text-center",children:[(0,x.jsx)("button",{onClick:()=>{e||(t(!e),setTimeout((()=>t(!1)),1e3))},children:(0,x.jsx)("img",{src:"/img/logo.png",className:"h-48 nozoom cursor-pointer "+(e?"animate-spin":""),alt:"Logo"})}),(0,x.jsxs)("h1",{className:"mx-auto max-w-4xl font-display text-5xl font-medium tracking-tight sm:text-7xl",children:["Create"," ",(0,x.jsxs)("span",{className:"relative whitespace-nowrap text-primary-darker",children:[(0,x.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 418 42",className:"absolute left-0 top-2/3 h-[0.58em] w-full fill-primary-default opacity-30",preserveAspectRatio:"none",children:(0,x.jsx)("path",{d:"M203.371.916c-26.013-2.078-76.686 1.963-124.73 9.946L67.3 12.749C35.421 18.062 18.2 21.766 6.004 25.934 1.244 27.561.828 27.778.874 28.61c.07 1.214.828 1.121 9.595-1.176 9.072-2.377 17.15-3.92 39.246-7.496C123.565 7.986 157.869 4.492 195.942 5.046c7.461.108 19.25 1.696 19.17 2.582-.107 1.183-7.874 4.31-25.75 10.366-21.992 7.45-35.43 12.534-36.701 13.884-2.173 2.308-.202 4.407 4.442 4.734 2.654.187 3.263.157 15.593-.78 35.401-2.686 57.944-3.488 88.365-3.143 46.327.526 75.721 2.23 130.788 7.584 19.787 1.924 20.814 1.98 24.557 1.332l.066-.011c1.201-.203 1.53-1.825.399-2.335-2.911-1.31-4.893-1.604-22.048-3.261-57.509-5.556-87.871-7.36-132.059-7.842-23.239-.254-33.617-.116-50.627.674-11.629.54-42.371 2.494-46.696 2.967-2.359.259 8.133-3.625 26.504-9.81 23.239-7.825 27.934-10.149 28.304-14.005.417-4.348-3.529-6-16.878-7.066Z"})}),(0,x.jsx)("span",{className:"relative",children:"your own"})]}),(0,x.jsx)("br",{}),"gaming platform."]}),(0,x.jsxs)("p",{className:"mx-auto mt-6 max-w-2xl text-lg tracking-tight text-text-light",children:["Hoarding video games is fun, but a chaotic list of files on a network share is not. ",(0,x.jsx)("br",{})," Let GameVault organize everything for you and enjoy a selfhosted Steam-like experience for games on your own home server."]}),(0,x.jsxs)("div",{className:"mt-10 grid grid-cols-1 sm:grid-cols-2 gap-4 max-w-xl mx-auto",children:[(0,x.jsx)(P,{href:"/docs/intro",children:"Learn more"}),(0,x.jsxs)(G,{options:[{label:"Microsoft Store",link:"https://www.microsoft.com/store/apps/9PCKDV76GL75"},{label:"GitHub",link:"https://github.com/Phalcode/gamevault-app/releases"}],children:["Download Client"," ",(0,x.jsx)("svg",{className:"-mr-1 h-5 w-5",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",children:(0,x.jsx)("path",{fillRule:"evenodd",d:"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",clipRule:"evenodd"})})]})]})]})}function q(){N.init("K6k7j6GHClhh"),N.trackViews();const{siteConfig:e}=(0,n.Z)();return(0,x.jsxs)(j.Z,{title:`${e.title}`,description:"the self-hosted gaming platform for drm-free games",children:[(0,x.jsx)("noscript",{children:(0,x.jsx)("img",{src:"https://api.swetrix.com/log/noscript?pid=K6k7j6GHClhh",alt:""})}),(0,x.jsxs)("main",{children:[(0,x.jsx)("section",{className:"bg-background-dark",children:(0,x.jsx)(_,{})}),(0,x.jsx)("br",{}),(0,x.jsx)(k,{children:(0,x.jsx)(w,{})}),(0,x.jsx)(S,{}),(0,x.jsx)("p",{className:"text--center text-xs font-bolder tracking-tighter",children:"*In case you're wondering, all depicted games on this website are placeholders and not real"})]})]})}},1714:function(e,t){!function(e){"use strict";var t=function(){return(t=Object.assign||function(e){for(var t,a=1,n=arguments.length;a i[0]&&c[1]Math.random()||this.submitError({filename:e.filename,lineno:e.lineno,colno:e.colno,name:(null==(t=e.error)?void 0:t.name)||"Error",message:(null==(t=e.error)?void 0:t.message)||e.message},!0)},w.prototype.trackErrors=function(e){var t=this;return this.errorListenerExists||!this.canTrack()?b:(this.errorsOptions=e,window.addEventListener("error",this.captureError),this.errorListenerExists=!0,{stop:function(){window.removeEventListener("error",t.captureError)}})},w.prototype.submitError=function(e,a){var n={pid:this.projectID},i=t({pg:this.activePage||m({hash:null==(i=this.pageViewsOptions)?void 0:i.hash,search:null==(i=this.pageViewsOptions)?void 0:i.search}),lc:o(),tz:r()},e);if(a&&null!=(e=this.errorsOptions)&&e.callback){if(!1===(a=this.errorsOptions.callback(i)))return;a&&"object"==typeof a&&Object.assign(i,a)}Object.assign(i,n),this.sendRequest("error",i)},w.prototype.track=function(e){return a(this,void 0,void 0,(function(){var a;return n(this,(function(n){switch(n.label){case 0:return this.canTrack()?(a=t(t({},e),{pid:this.projectID,pg:this.activePage,lc:o(),tz:r(),ref:s(),so:l(),me:c(),ca:u(),te:d(),co:h()}),[4,this.sendRequest("custom",a)]):[2];case 1:return n.sent(),[2]}}))}))},w.prototype.trackPageViews=function(e){var t,a,n;return this.canTrack()?(this.pageData||(null!=(this.pageViewsOptions=e)&&e.unique||(t=setInterval(this.trackPathChange,2e3)),setTimeout(this.heartbeat,3e3),a=setInterval(this.heartbeat,28e3),n=m({hash:null==e?void 0:e.hash,search:null==e?void 0:e.search}),this.pageData={path:n,actions:{stop:function(){clearInterval(t),clearInterval(a)}}},this.trackPage(n,null==e?void 0:e.unique)),this.pageData.actions):b},w.prototype.getPerformanceStats=function(){var e;return this.canTrack()&&!this.perfStatsCollected&&null!=(e=window.performance)&&e.getEntriesByType&&(e=window.performance.getEntriesByType("navigation")[0])?(this.perfStatsCollected=!0,{dns:e.domainLookupEnd-e.domainLookupStart,tls:e.secureConnectionStart?e.requestStart-e.secureConnectionStart:0,conn:e.secureConnectionStart?e.secureConnectionStart-e.connectStart:e.connectEnd-e.connectStart,response:e.responseEnd-e.responseStart,render:e.domComplete-e.domContentLoadedEventEnd,dom_load:e.domContentLoadedEventEnd-e.responseEnd,page_load:e.loadEventStart,ttfb:e.responseStart-e.requestStart}):{}},w.prototype.heartbeat=function(){var e;(null!=(e=this.pageViewsOptions)&&e.heartbeatOnBackground||"hidden"!==document.visibilityState)&&(e={pid:this.projectID},this.sendRequest("hb",e))},w.prototype.trackPathChange=function(){var e;this.pageData&&(e=m({hash:null==(e=this.pageViewsOptions)?void 0:e.hash,search:null==(e=this.pageViewsOptions)?void 0:e.search}),this.pageData.path!==e)&&this.trackPage(e,!1)},w.prototype.getPreviousPage=function(){if(this.activePage)return this.activePage;if("function"==typeof URL){var e=s();if(!e)return null;var t=location.host;try{var a=new URL(e),n=a.host,i=a.pathname;return t!==n?null:i}catch(e){}}return null},w.prototype.trackPage=function(e,t){var a;void 0===t&&(t=!1),this.pageData&&(this.pageData.path=e,a=this.getPerformanceStats(),this.activePage=e,this.submitPageView({pg:e},t,a,!0))},w.prototype.submitPageView=function(e,a,n,i){var m=this.getPreviousPage();if(n={pid:this.projectID,perf:n,unique:a},a=t({lc:o(),tz:r(),ref:s(),so:l(),me:c(),ca:u(),te:d(),co:h(),prev:m},e),i&&null!=(m=this.pageViewsOptions)&&m.callback){if(!1===(e=this.pageViewsOptions.callback(a)))return;e&&"object"==typeof e&&Object.assign(a,e)}Object.assign(a,n),this.sendRequest("",a)},w.prototype.canTrack=function(){var e;return!(null!=(e=this.options)&&e.disabled||"undefined"==typeof window||null!=(e=this.options)&&e.respectDNT&&"1"===(null==(e=window.navigator)?void 0:e.doNotTrack)||(null==(e=this.options)||!e.devMode)&&("localhost"===(null===location||void 0===location?void 0:location.hostname)||"127.0.0.1"===(null===location||void 0===location?void 0:location.hostname)||""===(null===location||void 0===location?void 0:location.hostname))||null!==navigator&&void 0!==navigator&&navigator.webdriver)},w.prototype.sendRequest=function(e,t){return a(this,void 0,void 0,(function(){var a;return n(this,(function(n){switch(n.label){case 0:return a=(null==(a=this.options)?void 0:a.apiURL)||"https://api.swetrix.com/log",[4,fetch("".concat(a,"/").concat(e),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})];case 1:return n.sent(),[2]}}))}))},w);function w(e,t){this.projectID=e,this.options=t,this.pageData=null,this.pageViewsOptions=null,this.errorsOptions=null,this.perfStatsCollected=!1,this.activePage=null,this.errorListenerExists=!1,this.trackPathChange=this.trackPathChange.bind(this),this.heartbeat=this.heartbeat.bind(this),this.captureError=this.captureError.bind(this)}e.LIB_INSTANCE=null,e.init=function(t,a){return e.LIB_INSTANCE||(e.LIB_INSTANCE=new y(t,a)),e.LIB_INSTANCE},e.pageview=function(t){e.LIB_INSTANCE&&e.LIB_INSTANCE.submitPageView(t.payload,Boolean(t.unique),{})},e.track=function(t){return a(this,void 0,void 0,(function(){return n(this,(function(a){switch(a.label){case 0:return e.LIB_INSTANCE?[4,e.LIB_INSTANCE.track(t)]:[2];case 1:return a.sent(),[2]}}))}))},e.trackError=function(t){e.LIB_INSTANCE&&e.LIB_INSTANCE.submitError(t,!1)},e.trackErrors=function(t){return e.LIB_INSTANCE?e.LIB_INSTANCE.trackErrors(t):b},e.trackPageview=function(t,a,n){e.LIB_INSTANCE&&e.LIB_INSTANCE.submitPageView({pg:t,prev:a||null},Boolean(n),{})},e.trackViews=function(t){return new Promise((function(a){e.LIB_INSTANCE?"undefined"==typeof document||"complete"===document.readyState?a(e.LIB_INSTANCE.trackPageViews(t)):window.addEventListener("load",(function(){a(e.LIB_INSTANCE.trackPageViews(t))})):a(b)}))},Object.defineProperty(e,"__esModule",{value:!0})}(t)}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.abd3f65c.js b/assets/js/c4f5d8e4.abd3f65c.js new file mode 100644 index 000000000..e35af5b3c --- /dev/null +++ b/assets/js/c4f5d8e4.abd3f65c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2634],{7933:(e,t,a)=>{a.r(t),a.d(t,{default:()=>X});var s=a(4480),i=a(3526),r=a(758);const o={features:"features_t9lD"},n=a.p+"assets/images/admin-0ad4037b89a248bffa4e939d647d326c.png",l=a.p+"assets/images/community-717286c80fce866c158ab595629a937a.png",c=a.p+"assets/images/game-45374cc5b999ec17b1ca3578f8ff926b.png",d=a.p+"assets/images/github-0cf1393534e30fd4eb2411670f3e9234.png",h=a.p+"assets/images/installation-318f17d2cf4b9f87ccafd406a2bdb009.png",m=a.p+"assets/images/library-afce4846b08b60cecca986a39b1fa331.png",u=a.p+"assets/medias/admin-3adfe380e11d3351a3ba7eb4e25ce685.mp4",p=a.p+"assets/medias/community-c59d264ef301a24c508f40a02340fd3c.mp4",g=a.p+"assets/medias/game-08b3dace3b1757584d3a82bab9bc7f93.mp4",f=a.p+"assets/medias/installation-b349635775bda338fd4babf0d8519e2c.mp4",x=a.p+"assets/medias/library-82c4106d4da1f0466e2995c53b6df7c0.mp4";var b=a(6070);const w=[{title:"\ud83c\udfae Browse Your Games",img:m,video:x,description:(0,b.jsx)(b.Fragment,{children:"Browse your server's beautifully organized library to download, install and play your collection of video games of all kinds!"})},{title:"\ud83d\udc6f Build Your Community",img:n,video:u,description:(0,b.jsx)(b.Fragment,{children:"Share your platform with your friends and family so they can enjoy your library, too. Administrate your users and games."})},{title:"\u23f1\ufe0f Track Your Progress",img:l,video:p,description:(0,b.jsx)(b.Fragment,{children:"See how long you or your friends have been playing a game, find out what they are and keep track of what you've already completed or abandoned."})},{title:"\ud83d\udd0e Automatic Metadata Enrichment",img:c,video:g,description:(0,b.jsx)(b.Fragment,{children:"GameVault automatically enriches your game with all the juicy information and and images from the largest video game database."})},{title:"\ud83d\udce6 Easy To Use",img:h,video:f,description:(0,b.jsxs)("div",{children:["There\u2019s no need to compile any code! The app is readily available in the"," ",(0,b.jsx)("a",{href:"https://www.microsoft.com/store/apps/9PCKDV76GL75",children:"Microsoft Store"}),". Plus, ","",(0,b.jsx)("a",{href:"/docs/client-docs/how-to-use.md#2-installing-the-game",children:"installing games"})," and ",(0,b.jsx)("a",{href:"/docs/server-docs/setup",children:"setting up a server"})," is equally straightforward!"]})},{title:"\ud83d\udc65 Join The Movement",img:d,description:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("a",{target:"_blank",href:"https://discord.gg/NEdNen2dSu",children:"Join our growing community"})," ",", star us on GitHub, or even ",(0,b.jsx)("a",{href:"/docs/contribute",children:"contribute"})," ","to our source-available project! Everyone can help!"]})}];function y(e){let{title:t,img:a,video:s,description:r}=e;return(0,b.jsxs)("div",{className:(0,i.A)("col col--4"),children:[(0,b.jsx)("div",{className:"text--center",children:s?(0,b.jsx)("video",{className:"w-full max-w-screen-sm rounded-xl",muted:!0,autoPlay:!0,controls:!0,loop:!0,src:s}):(0,b.jsx)("img",{className:"rounded-xl",alt:t,src:a})}),(0,b.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,b.jsx)("h3",{children:t}),(0,b.jsx)("p",{children:r})]})]})}function v(){return(0,b.jsx)("section",{className:o.features,children:(0,b.jsx)("div",{className:"container",children:(0,b.jsx)("div",{className:"row",children:w.map(((e,t)=>(0,b.jsx)(y,{...e},t)))})})})}var j=a(3385);const k=e=>{const t=location.search.match(e);return t&&t[2]||void 0},N=/[?&](ref|source|utm_source)=([^?&]+)/,E=/[?&](utm_campaign)=([^?&]+)/,V=/[?&](utm_medium)=([^?&]+)/,S=/[?&](utm_term)=([^?&]+)/,G=/[?&](utm_content)=([^?&]+)/,C=()=>void 0!==navigator.languages?navigator.languages[0]:navigator.language,D=()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(e){return}},q=()=>document.referrer||void 0,O=()=>k(N),P=()=>k(V),L=()=>k(E),T=()=>k(S),R=()=>k(G),I=e=>{let t=location.pathname||"";if(e.hash){const e=location.hash.indexOf("?");t+=e>-1?location.hash.substring(0,e):location.hash}if(e.search){const e=location.hash.indexOf("?");t+=location.search||(e>-1?location.hash.substring(e):"")}return t},M={stop(){}};class A{constructor(e,t){this.projectID=e,this.options=t,this.pageData=null,this.pageViewsOptions=null,this.errorsOptions=null,this.perfStatsCollected=!1,this.activePage=null,this.errorListenerExists=!1,this.trackPathChange=this.trackPathChange.bind(this),this.heartbeat=this.heartbeat.bind(this),this.captureError=this.captureError.bind(this)}captureError(e){"number"==typeof this.errorsOptions?.sampleRate&&this.errorsOptions.sampleRate>Math.random()||this.submitError({filename:e.filename,lineno:e.lineno,colno:e.colno,name:e.error?.name||"Error",message:e.error?.message||e.message},!0)}trackErrors(e){return this.errorListenerExists||!this.canTrack()?M:(this.errorsOptions=e,window.addEventListener("error",this.captureError),this.errorListenerExists=!0,{stop:()=>{window.removeEventListener("error",this.captureError)}})}submitError(e,t){const a={pid:this.projectID},s={pg:this.activePage||I({hash:this.pageViewsOptions?.hash,search:this.pageViewsOptions?.search}),lc:C(),tz:D(),...e};if(t&&this.errorsOptions?.callback){const e=this.errorsOptions.callback(s);if(!1===e)return;e&&"object"==typeof e&&Object.assign(s,e)}Object.assign(s,a),this.sendRequest("error",s)}async track(e){if(!this.canTrack())return;const t={...e,pid:this.projectID,pg:this.activePage,lc:C(),tz:D(),ref:q(),so:O(),me:P(),ca:L(),te:T(),co:R()};await this.sendRequest("custom",t)}trackPageViews(e){if(!this.canTrack())return M;if(this.pageData)return this.pageData.actions;let t;this.pageViewsOptions=e,e?.unique||(t=setInterval(this.trackPathChange,2e3)),setTimeout(this.heartbeat,3e3);const a=setInterval(this.heartbeat,28e3),s=I({hash:e?.hash,search:e?.search});return this.pageData={path:s,actions:{stop:()=>{clearInterval(t),clearInterval(a)}}},this.trackPage(s,e?.unique),this.pageData.actions}getPerformanceStats(){if(!this.canTrack()||this.perfStatsCollected||!window.performance?.getEntriesByType)return{};const e=window.performance.getEntriesByType("navigation")[0];return e?(this.perfStatsCollected=!0,{dns:e.domainLookupEnd-e.domainLookupStart,tls:e.secureConnectionStart?e.requestStart-e.secureConnectionStart:0,conn:e.secureConnectionStart?e.secureConnectionStart-e.connectStart:e.connectEnd-e.connectStart,response:e.responseEnd-e.responseStart,render:e.domComplete-e.domContentLoadedEventEnd,dom_load:e.domContentLoadedEventEnd-e.responseEnd,page_load:e.loadEventStart,ttfb:e.responseStart-e.requestStart}):{}}heartbeat(){if(!this.pageViewsOptions?.heartbeatOnBackground&&"hidden"===document.visibilityState)return;const e={pid:this.projectID};this.sendRequest("hb",e)}trackPathChange(){if(!this.pageData)return;const e=I({hash:this.pageViewsOptions?.hash,search:this.pageViewsOptions?.search}),{path:t}=this.pageData;t!==e&&this.trackPage(e,!1)}trackPage(e,t=!1){if(!this.pageData)return;this.pageData.path=e;const a=this.getPerformanceStats();this.activePage=e,this.submitPageView({pg:e},t,a,!0)}submitPageView(e,t,a,s){const i={pid:this.projectID,perf:a,unique:t},r={lc:C(),tz:D(),ref:q(),so:O(),me:P(),ca:L(),te:T(),co:R(),...e};if(s&&this.pageViewsOptions?.callback){const e=this.pageViewsOptions.callback(r);if(!1===e)return;e&&"object"==typeof e&&Object.assign(r,e)}Object.assign(r,i),this.sendRequest("",r)}canTrack(){return!(this.options?.disabled||"undefined"==typeof window||this.options?.respectDNT&&"1"===window.navigator?.doNotTrack||!this.options?.devMode&&("localhost"===location?.hostname||"127.0.0.1"===location?.hostname||""===location?.hostname)||navigator?.webdriver)}async sendRequest(e,t){const a=this.options?.apiURL||"https://api.swetrix.com/log";await fetch(`${a}/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}}let _=null;function z(e){let{className:t,...a}=e;return(0,b.jsx)("div",{className:(0,i.A)("mx-auto max-w-7xl px-4 sm:px-6 lg:px-8",t),...a})}var B=a(88);const H=[[{question:"Does GameVault combine my gaming platforms in one place?",answer:"No, GameVault is not for combining games from different platforms into one app. Rather, it's for managing your own gaming platform with your own game files hosted on your server."},{question:"Is GameVault open-source?",answer:"No, GameVault is source-available, meaning the code is open for you to explore and modify for personal use. However, you may not use it for commercial purposes."},{question:"Is GameVault a tool for piracy?",answer:"No, it isn't. GameVault is designed to manage legally obtained DRM-free games. While it can technically be used with illegally obtained games, we do not endorse or support piracy. We encourage users to comply with copyright laws. Unlawful use is strictly improper and unauthorized."}],[{question:"Does GameVault work with games from Steam, Epic Games, Microsoft, etc.?",answer:"Usually not. GameVault is made for games you own and only works with DRM-free games, either pure game files or installers. Most platforms use DRM, but there are exceptions like GOG and Humble Bundle that don\u2019t."},{question:"Is there a native client for Mac or Linux?",answer:"No, apart from emulation or community-maintained clients, there is currently no native Linux or Mac GameVault client application."},{question:"Does GameVault have anything to do with gambling?",answer:"No, absolutely not. There's just a gambling app with a similar name on the market. If you're struggling with gambling addiction, please seek help."}],[{question:"Does GameVault stream games?",answer:"No, GameVault has nothing to do with streaming. It's simply an app to organize and browse your game library in a Steam-like experience and share it with your community."},{question:"Does GameVault cost any money?",answer:"No, the core features of GameVault are and will always be free. However, we do offer a paid GameVault+ subscription for some additional extra features, which you can subscribe to if you'd like to continuously support our work."},{question:"What was the former name of GameVault?",answer:"The first rule of GameVault is: you do not talk about the former name of GameVault."}]];function F(){return(0,b.jsx)("section",{id:"faq","aria-labelledby":"faq-title",className:"relative overflow-hidden py-16",children:(0,b.jsxs)(z,{className:"relative",children:[(0,b.jsxs)("div",{className:"mx-auto lg:mx-0",children:[(0,b.jsx)("h2",{id:"faq-title",className:"font-display text-3xl tracking-tight sm:text-4xl",children:"Frequently asked questions"}),(0,b.jsxs)("p",{className:"mt-4 text-lg tracking-tight text-text-light",children:["If you can\u2019t find what you\u2019re looking for here, check out the"," ",(0,b.jsx)(B.A,{href:"https://gamevau.lt/docs/intro",children:"Docs"})," or contact us via"," ",(0,b.jsx)(B.A,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),","," ",(0,b.jsx)(B.A,{href:"https://github.com/Phalcode/gamevault-app/discussions",children:"GitHub"}),", or ",(0,b.jsx)(B.A,{href:"mailto:contact@phalco.de",children:"Email"})]})]}),(0,b.jsx)("ul",{className:"list-none mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 lg:max-w-none lg:grid-cols-3",children:H.map(((e,t)=>(0,b.jsx)("li",{children:(0,b.jsx)("ul",{className:"list-none flex flex-col gap-y-8",children:e.map(((e,t)=>(0,b.jsxs)("li",{children:[(0,b.jsx)("h3",{className:"font-display text-lg leading-7",children:e.question}),(0,b.jsx)("p",{className:"mt-4 text-sm text-text-light",children:e.answer})]},t)))})},t)))})]})})}var K=a(2736),U=a.n(K);const J={solid:"group inline-flex items-center justify-center rounded-full py-2 px-4 text-sm font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2 !no-underline",outline:"group inline-flex ring-1 items-center justify-center rounded-full py-2 px-4 text-sm focus:outline-none"},W={solid:{primary:"bg-primary-default text-white hover:text-white hover:bg-primary-darker active:bg-primary-darkest focus-visible:outline-primary-darkest"}};function Y(e){let{className:t,...a}=e;a.variant??="solid",a.color??="primary";const s=(r=a.variant,o=a.color,"outline"===r?W.outline?.[o]:"solid"===r?W.solid?.[o]:void 0);var r,o;return t=(0,i.A)(J[a.variant],s,t),console.log(t),void 0===a.href?(0,b.jsx)("button",{className:t,...a}):(0,b.jsx)(B.A,{className:t,...a})}Y.propTypes={href:U().string,className:U().string,variant:U().oneOf(["solid","outline"]),color:U().oneOf(["primary"])};const Z=e=>{let{className:t,options:a,...s}=e;const[i,o]=(0,r.useState)(!1),n=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const e=e=>{n.current&&!n.current.contains(e.target)&&o(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)}),[]),(0,b.jsxs)("span",{ref:n,className:"relative inline-block text-left",children:[(0,b.jsx)(Y,{className:t+" w-full",...s,onClick:()=>o(!i)}),i&&(0,b.jsx)("div",{className:"absolute right-0 z-10 mt-2 w-full origin-top-right rounded-md bg-background-dark shadow-lg ring-1 ring-text-light",role:"menu","aria-orientation":"vertical",children:(0,b.jsx)("div",{className:"py-1",role:"none",children:a.map((e=>(0,b.jsx)(B.A,{href:e.link,target:"_blank",className:"font-bold hover:no-underline block px-4 py-2 text-sm hover:bg-background-default text-text-default","aria-label":e.label,children:e.label},e.label)))})})]})};Z.propTypes={className:U().string,options:U().arrayOf(U().shape({label:U().string.isRequired,link:U().string.isRequired})).isRequired};const $=Z;function Q(){const[e,t]=(0,r.useState)(!1);return(0,b.jsxs)(z,{className:"pb-16 pt-20 text-center",children:[(0,b.jsx)("button",{onClick:()=>{e||(t(!e),setTimeout((()=>t(!1)),1e3))},children:(0,b.jsx)("img",{src:"/img/logo.png",className:"h-48 nozoom cursor-pointer "+(e?"animate-spin":""),alt:"Logo"})}),(0,b.jsxs)("h1",{className:"mx-auto max-w-4xl font-display text-5xl font-medium tracking-tight sm:text-7xl",children:["Create"," ",(0,b.jsxs)("span",{className:"relative whitespace-nowrap text-primary-darker",children:[(0,b.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 418 42",className:"absolute left-0 top-2/3 h-[0.58em] w-full fill-primary-default opacity-30",preserveAspectRatio:"none",children:(0,b.jsx)("path",{d:"M203.371.916c-26.013-2.078-76.686 1.963-124.73 9.946L67.3 12.749C35.421 18.062 18.2 21.766 6.004 25.934 1.244 27.561.828 27.778.874 28.61c.07 1.214.828 1.121 9.595-1.176 9.072-2.377 17.15-3.92 39.246-7.496C123.565 7.986 157.869 4.492 195.942 5.046c7.461.108 19.25 1.696 19.17 2.582-.107 1.183-7.874 4.31-25.75 10.366-21.992 7.45-35.43 12.534-36.701 13.884-2.173 2.308-.202 4.407 4.442 4.734 2.654.187 3.263.157 15.593-.78 35.401-2.686 57.944-3.488 88.365-3.143 46.327.526 75.721 2.23 130.788 7.584 19.787 1.924 20.814 1.98 24.557 1.332l.066-.011c1.201-.203 1.53-1.825.399-2.335-2.911-1.31-4.893-1.604-22.048-3.261-57.509-5.556-87.871-7.36-132.059-7.842-23.239-.254-33.617-.116-50.627.674-11.629.54-42.371 2.494-46.696 2.967-2.359.259 8.133-3.625 26.504-9.81 23.239-7.825 27.934-10.149 28.304-14.005.417-4.348-3.529-6-16.878-7.066Z"})}),(0,b.jsx)("span",{className:"relative",children:"your own"})]}),(0,b.jsx)("br",{}),"gaming platform."]}),(0,b.jsxs)("p",{className:"mx-auto mt-6 max-w-2xl text-lg tracking-tight text-text-light",children:["Hoarding video games is fun, but a chaotic list of files on a network share is not. ",(0,b.jsx)("br",{})," Let GameVault organize everything for you and enjoy a selfhosted Steam-like experience for games on your own home server."]}),(0,b.jsxs)("div",{className:"mt-10 grid grid-cols-1 sm:grid-cols-2 gap-4 max-w-xl mx-auto",children:[(0,b.jsx)(Y,{href:"/docs/intro",children:"Learn more"}),(0,b.jsxs)($,{options:[{label:"Microsoft Store",link:"https://www.microsoft.com/store/apps/9PCKDV76GL75"},{label:"GitHub",link:"https://github.com/Phalcode/gamevault-app/releases"}],children:["Download Client"," ",(0,b.jsx)("svg",{className:"-mr-1 h-5 w-5",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",children:(0,b.jsx)("path",{fillRule:"evenodd",d:"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",clipRule:"evenodd"})})]})]})]})}function X(){var e,t;e="K6k7j6GHClhh",_||(_=new A(e,t)),function(e){new Promise((t=>{_?"undefined"==typeof document||"complete"===document.readyState?t(_.trackPageViews(e)):window.addEventListener("load",(()=>{t(_.trackPageViews(e))})):t(M)}))}();const{siteConfig:a}=(0,s.A)();return(0,b.jsxs)(j.A,{title:`${a.title}`,description:"the self-hosted gaming platform for drm-free games",children:[(0,b.jsx)("noscript",{children:(0,b.jsx)("img",{src:"https://api.swetrix.com/log/noscript?pid=K6k7j6GHClhh",alt:""})}),(0,b.jsxs)("main",{children:[(0,b.jsx)("section",{className:"bg-background-dark",children:(0,b.jsx)(Q,{})}),(0,b.jsx)("br",{}),(0,b.jsx)(z,{children:(0,b.jsx)(v,{})}),(0,b.jsx)(F,{}),(0,b.jsx)("p",{className:"text--center text-xs font-bolder tracking-tighter",children:"*In case you're wondering, all depicted games on this website are placeholders and not real"})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/c71ef62c.433c7f12.js b/assets/js/c71ef62c.6837e458.js similarity index 85% rename from assets/js/c71ef62c.433c7f12.js rename to assets/js/c71ef62c.6837e458.js index 39baca80d..c85c16ac3 100644 --- a/assets/js/c71ef62c.433c7f12.js +++ b/assets/js/c71ef62c.6837e458.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2328],{3584:e=>{e.exports=JSON.parse('{"tag":{"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/keyhole-representation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8790],{1187:e=>{e.exports=JSON.parse('{"tag":{"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/keyhole-representation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c7bbcbc7.071b1ca6.js b/assets/js/c7bbcbc7.063da928.js similarity index 84% rename from assets/js/c7bbcbc7.071b1ca6.js rename to assets/js/c7bbcbc7.063da928.js index 0bd79a2f8..2f2d644c6 100644 --- a/assets/js/c7bbcbc7.071b1ca6.js +++ b/assets/js/c7bbcbc7.063da928.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2422],{1360:a=>{a.exports=JSON.parse('{"tag":{"label":"startup","permalink":"/blog/tags/startup","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/startup","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6260],{2227:a=>{a.exports=JSON.parse('{"tag":{"label":"startup","permalink":"/blog/tags/startup","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/startup","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c8472403.ffbd8f0a.js b/assets/js/c8472403.5b89e67c.js similarity index 84% rename from assets/js/c8472403.ffbd8f0a.js rename to assets/js/c8472403.5b89e67c.js index 01bb7b90c..5a8ed3273 100644 --- a/assets/js/c8472403.ffbd8f0a.js +++ b/assets/js/c8472403.5b89e67c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9710],{4051:a=>{a.exports=JSON.parse('{"tag":{"label":"special thanks","permalink":"/blog/tags/special-thanks","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/special-thanks","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2932],{3926:a=>{a.exports=JSON.parse('{"tag":{"label":"special thanks","permalink":"/blog/tags/special-thanks","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/special-thanks","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c89c7974.7746f383.js b/assets/js/c89c7974.7746f383.js deleted file mode 100644 index e7816994e..000000000 --- a/assets/js/c89c7974.7746f383.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5865],{433:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var n=a(2676),i=a(8358);const o={sidebar_position:4},s="REST API Usage",r={id:"advanced-usage/rest-api",title:"REST API Usage",description:"The GameVault Backend Server offers a fully documented REST API for use to everyone. With the API, you can build your own GameVault clients or 3rd party integrations and manage your libraries automatically.",source:"@site/docs/advanced-usage/rest-api.md",sourceDirName:"advanced-usage",slug:"/advanced-usage/rest-api",permalink:"/docs/advanced-usage/rest-api",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/rest-api.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"docs",previous:{title:"Themes",permalink:"/docs/client-docs/themes"},next:{title:"Early Access Program",permalink:"/docs/advanced-usage/early-access-program"}},c={},d=[{value:"Register a Bot User",id:"register-a-bot-user",level:2},{value:"OpenAPI Specification",id:"openapi-specification",level:2},{value:"Authentication",id:"authentication",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"rest-api-usage",children:"REST API Usage"})}),"\n",(0,n.jsx)(t.p,{children:"The GameVault Backend Server offers a fully documented REST API for use to everyone. With the API, you can build your own GameVault clients or 3rd party integrations and manage your libraries automatically."}),"\n",(0,n.jsx)(t.h2,{id:"register-a-bot-user",children:"Register a Bot User"}),"\n",(0,n.jsxs)(t.p,{children:["To use the GameVault API, it is recommended to register a separate user with the username prefix ",(0,n.jsx)(t.code,{children:"gvbot_"})," (e.g. ",(0,n.jsx)(t.code,{children:"gvbot_image_downloader"}),"). The bot user will not appear in the public user list. This user will be used to authenticate your API requests. You can do this by using the Register Form in the settings tab of the GameVault App."]}),"\n",(0,n.jsx)(t.h2,{id:"openapi-specification",children:"OpenAPI Specification"}),"\n",(0,n.jsxs)(t.p,{children:["You can check out the API specification at ",(0,n.jsx)(t.code,{children:"/api/docs"})," after making sure the server environment variable ",(0,n.jsx)(t.code,{children:"SERVER_API_DOCS_ENABLED"})," is set to ",(0,n.jsx)(t.code,{children:"true"}),". There is also a hosted version of the latest API Documentation available at ",(0,n.jsx)(t.a,{href:"https://demo.gamevau.lt/api/docs",children:"demo.gamevau.lt/api/docs"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"The API documentation provides a complete guide on how to use the API, including authentication, endpoints, and parameters."}),"\n",(0,n.jsxs)(t.p,{children:["You can also download the OpenAPI Specification in different formats using ",(0,n.jsx)(t.code,{children:"example.com/api/docs-json"})," or ",(0,n.jsx)(t.code,{children:"example.com/api/docs-yaml"}),". This is useful for importing the Calls into a tool like Postman or generate the client code using the openapi-generator."]}),"\n",(0,n.jsx)(t.h2,{id:"authentication",children:"Authentication"}),"\n",(0,n.jsx)(t.p,{children:"Almost all requests to the API require basic-auth authentication. You will need to include it in the Authentication header of each request."})]})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8358:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>s});var n=a(5271);const i={},o=n.createContext(i);function s(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c89c7974.dc12986b.js b/assets/js/c89c7974.dc12986b.js new file mode 100644 index 000000000..caa1e0706 --- /dev/null +++ b/assets/js/c89c7974.dc12986b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9267],{2830:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"advanced-usage/rest-api","title":"REST API Usage","description":"The GameVault Backend Server offers a fully documented REST API for use to everyone. With the API, you can build your own GameVault clients or 3rd party integrations and manage your libraries automatically.","source":"@site/docs/advanced-usage/rest-api.md","sourceDirName":"advanced-usage","slug":"/advanced-usage/rest-api","permalink":"/docs/advanced-usage/rest-api","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/rest-api.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":4,"frontMatter":{"sidebar_position":4},"sidebar":"docs","previous":{"title":"Themes","permalink":"/docs/client-docs/themes"},"next":{"title":"Early Access Program","permalink":"/docs/advanced-usage/early-access-program"}}');var i=a(6070),s=a(8591);const o={sidebar_position:4},r="REST API Usage",c={},d=[{value:"Register a Bot User",id:"register-a-bot-user",level:2},{value:"OpenAPI Specification",id:"openapi-specification",level:2},{value:"Authentication",id:"authentication",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"rest-api-usage",children:"REST API Usage"})}),"\n",(0,i.jsx)(t.p,{children:"The GameVault Backend Server offers a fully documented REST API for use to everyone. With the API, you can build your own GameVault clients or 3rd party integrations and manage your libraries automatically."}),"\n",(0,i.jsx)(t.h2,{id:"register-a-bot-user",children:"Register a Bot User"}),"\n",(0,i.jsxs)(t.p,{children:["To use the GameVault API, it is recommended to register a separate user with the username prefix ",(0,i.jsx)(t.code,{children:"gvbot_"})," (e.g. ",(0,i.jsx)(t.code,{children:"gvbot_image_downloader"}),"). The bot user will not appear in the public user list. This user will be used to authenticate your API requests. You can do this by using the Register Form in the settings tab of the GameVault App."]}),"\n",(0,i.jsx)(t.h2,{id:"openapi-specification",children:"OpenAPI Specification"}),"\n",(0,i.jsxs)(t.p,{children:["You can check out the API specification at ",(0,i.jsx)(t.code,{children:"/api/docs"})," after making sure the server environment variable ",(0,i.jsx)(t.code,{children:"SERVER_API_DOCS_ENABLED"})," is set to ",(0,i.jsx)(t.code,{children:"true"}),". There is also a hosted version of the latest API Documentation available at ",(0,i.jsx)(t.a,{href:"https://demo.gamevau.lt/api/docs",children:"demo.gamevau.lt/api/docs"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"The API documentation provides a complete guide on how to use the API, including authentication, endpoints, and parameters."}),"\n",(0,i.jsxs)(t.p,{children:["You can also download the OpenAPI Specification in different formats using ",(0,i.jsx)(t.code,{children:"example.com/api/docs-json"})," or ",(0,i.jsx)(t.code,{children:"example.com/api/docs-yaml"}),". This is useful for importing the Calls into a tool like Postman or generate the client code using the openapi-generator."]}),"\n",(0,i.jsx)(t.h2,{id:"authentication",children:"Authentication"}),"\n",(0,i.jsx)(t.p,{children:"Almost all requests to the API require basic-auth authentication. You will need to include it in the Authentication header of each request."})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>r});var n=a(758);const i={},s=n.createContext(i);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c8fbe42c.6e3567e1.js b/assets/js/c8fbe42c.17edd14e.js similarity index 85% rename from assets/js/c8fbe42c.6e3567e1.js rename to assets/js/c8fbe42c.17edd14e.js index 05bab68fd..e1046503f 100644 --- a/assets/js/c8fbe42c.6e3567e1.js +++ b/assets/js/c8fbe42c.17edd14e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8364],{3131:a=>{a.exports=JSON.parse('{"tag":{"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/selfhosted-podcast","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9748],{4022:a=>{a.exports=JSON.parse('{"tag":{"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/selfhosted-podcast","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c9618c72.f7a3fb5e.js b/assets/js/c9618c72.0b818960.js similarity index 85% rename from assets/js/c9618c72.f7a3fb5e.js rename to assets/js/c9618c72.0b818960.js index 8437e6b97..1a99413fe 100644 --- a/assets/js/c9618c72.f7a3fb5e.js +++ b/assets/js/c9618c72.0b818960.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1472],{9311:a=>{a.exports=JSON.parse('{"tag":{"label":"official installations","permalink":"/blog/tags/official-installations","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/official-installations","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9484],{3718:a=>{a.exports=JSON.parse('{"tag":{"label":"official installations","permalink":"/blog/tags/official-installations","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/official-installations","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c9cac9d9.33dd62bd.js b/assets/js/c9cac9d9.33dd62bd.js deleted file mode 100644 index 822378a26..000000000 --- a/assets/js/c9cac9d9.33dd62bd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6325],{1305:e=>{e.exports=JSON.parse('{"tag":{"label":"release","permalink":"/blog/tags/release","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/dd9b1d9d.8e104c95.js b/assets/js/c9cac9d9.91b6f91c.js similarity index 51% rename from assets/js/dd9b1d9d.8e104c95.js rename to assets/js/c9cac9d9.91b6f91c.js index 0897a5b96..2682f699d 100644 --- a/assets/js/dd9b1d9d.8e104c95.js +++ b/assets/js/c9cac9d9.91b6f91c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3433],{836:s=>{s.exports=JSON.parse('{"tag":{"label":"success","permalink":"/blog/tags/success","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/success","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4918],{371:e=>{e.exports=JSON.parse('{"tag":{"label":"release","permalink":"/blog/tags/release","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/release","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c9d2adb2.72742313.js b/assets/js/c9d2adb2.72742313.js new file mode 100644 index 000000000..2609922a6 --- /dev/null +++ b/assets/js/c9d2adb2.72742313.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3506],{9829:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>r});const i=JSON.parse('{"id":"gamevault-plus/client-setup","title":"Client Setup","description":"Setting up your GameVault+ License within your GameVault Client Application is simple and easy.","source":"@site/docs/gamevault-plus/client-setup.md","sourceDirName":"gamevault-plus","slug":"/gamevault-plus/client-setup","permalink":"/docs/gamevault-plus/client-setup","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/client-setup.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"title":"Client Setup"},"sidebar":"docs","previous":{"title":"Introduction","permalink":"/docs/gamevault-plus/introduction"},"next":{"title":"Themes","permalink":"/docs/gamevault-plus/themes"}}');var l=t(6070),s=t(8591);const o={sidebar_position:2,title:"Client Setup"},a=void 0,c={},r=[{value:"Linking Your Phalcode Account",id:"linking-your-phalcode-account",level:2},{value:"Retrieving Your License",id:"retrieving-your-license",level:2},{value:"Offline Usage",id:"offline-usage",level:3}];function u(e){const n={code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",...(0,s.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.p,{children:"Setting up your GameVault+ License within your GameVault Client Application is simple and easy."}),"\n",(0,l.jsx)(n.h2,{id:"linking-your-phalcode-account",children:"Linking Your Phalcode Account"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Open the GameVault Client Application and go to the ",(0,l.jsx)(n.code,{children:"Settings"})," tab. Then, click on the ",(0,l.jsx)(n.code,{children:"GameVault+"})," button."]}),"\n",(0,l.jsxs)(n.li,{children:["Click the ",(0,l.jsx)(n.code,{children:"Log In"})," button and enter your credentials to sign in."]}),"\n"]}),"\n",(0,l.jsx)(n.p,{children:"Your credentials will be securely stored within the application for future use."}),"\n",(0,l.jsx)(n.p,{children:"From now on, each time you start the application, it will automatically attempt to log in using the stored credentials and retrieve your licenses. If the credentials are no longer valid, you will be prompted to log in again."}),"\n",(0,l.jsx)(n.h2,{id:"retrieving-your-license",children:"Retrieving Your License"}),"\n",(0,l.jsx)(n.p,{children:"Upon successful login, the client will try to fetch your GameVault+ license."}),"\n",(0,l.jsx)(n.p,{children:"If a valid license is found, you will see your license details and a button to manage your subscription in the GameVault+ Settings. If no license is found, an error message will be displayed."}),"\n",(0,l.jsxs)(n.p,{children:["You can also manually request to refresh your licenses using the ",(0,l.jsx)(n.code,{children:"Refresh"})," button."]}),"\n",(0,l.jsx)(n.h3,{id:"offline-usage",children:"Offline Usage"}),"\n",(0,l.jsx)(n.p,{children:"Once the initial setup is complete, GameVault+ can be used offline."}),"\n",(0,l.jsx)(n.p,{children:"When a valid license is detected during the setup process, an encrypted copy of the license is stored within the application, enabling offline usage. You can access GameVault+ offline with its license until the license expires."}),"\n",(0,l.jsx)(n.p,{children:"Your offline licenses are renewed each time you log in, as long as an internet connection is available."})]})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(u,{...e})}):u(e)}},8591:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var i=t(758);const l={},s=i.createContext(l);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9d2adb2.a548cf92.js b/assets/js/c9d2adb2.a548cf92.js deleted file mode 100644 index 6d0371224..000000000 --- a/assets/js/c9d2adb2.a548cf92.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2701],{5956:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>r});var i=t(2676),l=t(8358);const s={sidebar_position:2,title:"Client Setup"},o=void 0,a={id:"gamevault-plus/client-setup",title:"Client Setup",description:"Setting up your GameVault+ License within your GameVault Client Application is simple and easy.",source:"@site/docs/gamevault-plus/client-setup.md",sourceDirName:"gamevault-plus",slug:"/gamevault-plus/client-setup",permalink:"/docs/gamevault-plus/client-setup",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/client-setup.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Client Setup"},sidebar:"docs",previous:{title:"Introduction",permalink:"/docs/gamevault-plus/introduction"},next:{title:"Themes",permalink:"/docs/gamevault-plus/themes"}},c={},r=[{value:"Linking Your Phalcode Account",id:"linking-your-phalcode-account",level:2},{value:"Retrieving Your License",id:"retrieving-your-license",level:2},{value:"Offline Usage",id:"offline-usage",level:3}];function u(e){const n={code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Setting up your GameVault+ License within your GameVault Client Application is simple and easy."}),"\n",(0,i.jsx)(n.h2,{id:"linking-your-phalcode-account",children:"Linking Your Phalcode Account"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Open the GameVault Client Application and go to the ",(0,i.jsx)(n.code,{children:"Settings"})," tab. Then, click on the ",(0,i.jsx)(n.code,{children:"GameVault+"})," button."]}),"\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.code,{children:"Log In"})," button and enter your credentials to sign in."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Your credentials will be securely stored within the application for future use."}),"\n",(0,i.jsx)(n.p,{children:"From now on, each time you start the application, it will automatically attempt to log in using the stored credentials and retrieve your licenses. If the credentials are no longer valid, you will be prompted to log in again."}),"\n",(0,i.jsx)(n.h2,{id:"retrieving-your-license",children:"Retrieving Your License"}),"\n",(0,i.jsx)(n.p,{children:"Upon successful login, the client will try to fetch your GameVault+ license."}),"\n",(0,i.jsx)(n.p,{children:"If a valid license is found, you will see your license details and a button to manage your subscription in the GameVault+ Settings. If no license is found, an error message will be displayed."}),"\n",(0,i.jsxs)(n.p,{children:["You can also manually request to refresh your licenses using the ",(0,i.jsx)(n.code,{children:"Refresh"})," button."]}),"\n",(0,i.jsx)(n.h3,{id:"offline-usage",children:"Offline Usage"}),"\n",(0,i.jsx)(n.p,{children:"Once the initial setup is complete, GameVault+ can be used offline."}),"\n",(0,i.jsx)(n.p,{children:"When a valid license is detected during the setup process, an encrypted copy of the license is stored within the application, enabling offline usage. You can access GameVault+ offline with its license until the license expires."}),"\n",(0,i.jsx)(n.p,{children:"Your offline licenses are renewed each time you log in, as long as an internet connection is available."})]})}function d(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8358:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var i=t(5271);const l={},s=i.createContext(l);function o(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca2d5c98.f3114af4.js b/assets/js/ca2d5c98.f6c7881c.js similarity index 84% rename from assets/js/ca2d5c98.f3114af4.js rename to assets/js/ca2d5c98.f6c7881c.js index cefc2e91f..f000960be 100644 --- a/assets/js/ca2d5c98.f3114af4.js +++ b/assets/js/ca2d5c98.f6c7881c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3392],{9401:a=>{a.exports=JSON.parse('{"tag":{"label":"motivation","permalink":"/blog/tags/motivation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/motivation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9218],{7527:a=>{a.exports=JSON.parse('{"tag":{"label":"motivation","permalink":"/blog/tags/motivation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/motivation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/cc0b9cf0.be0010eb.js b/assets/js/cc0b9cf0.cede556c.js similarity index 85% rename from assets/js/cc0b9cf0.be0010eb.js rename to assets/js/cc0b9cf0.cede556c.js index a64550972..42a3e5b25 100644 --- a/assets/js/cc0b9cf0.be0010eb.js +++ b/assets/js/cc0b9cf0.cede556c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6364],{7587:a=>{a.exports=JSON.parse('{"tag":{"label":"source-available","permalink":"/blog/tags/source-available","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/source-available","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4605],{8043:a=>{a.exports=JSON.parse('{"tag":{"label":"source-available","permalink":"/blog/tags/source-available","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/source-available","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/cc616304.25ec3595.js b/assets/js/cc616304.25ec3595.js new file mode 100644 index 000000000..86379ff49 --- /dev/null +++ b/assets/js/cc616304.25ec3595.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2419],{5029:e=>{e.exports=JSON.parse('{"tag":{"label":"easter egg","permalink":"/blog/tags/easter-egg","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/easter-egg","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/cc616304.77584d59.js b/assets/js/cc616304.77584d59.js deleted file mode 100644 index 18d6ef7ba..000000000 --- a/assets/js/cc616304.77584d59.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[717],{2453:e=>{e.exports=JSON.parse('{"tag":{"label":"easter egg","permalink":"/blog/tags/easter-egg","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/easter-egg","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.3a091c2c.js b/assets/js/ccc49370.3a091c2c.js deleted file mode 100644 index 0ee9bbea8..000000000 --- a/assets/js/ccc49370.3a091c2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6103],{9449:(e,t,n)=>{n.d(t,{Z:()=>w});n(5271);var a=n(4814),s=n(5023),r=n(2676);function i(e){let{children:t,className:n}=e;return(0,r.jsx)("article",{className:n,children:t})}var l=n(6527);const o={title:"title_c9tz"};function c(e){let{className:t}=e;const{metadata:n,isBlogPostPage:i}=(0,s.nO)(),{permalink:c,title:d}=n,m=i?"h1":"h2";return(0,r.jsx)(m,{className:(0,a.Z)(o.title,t),children:i?d:(0,r.jsx)(l.Z,{to:c,children:d})})}var d=n(2922),m=n(2351),u=n(1956);const g={container:"container_xAnX"};function h(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=(0,m.c)();return t=>{const n=Math.ceil(t);return e(n,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:n}))}}();return(0,r.jsx)(r.Fragment,{children:n(t)})}function x(e){let{date:t,formattedDate:n}=e;return(0,r.jsx)("time",{dateTime:t,children:n})}function f(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function p(e){let{className:t}=e;const{metadata:n}=(0,s.nO)(),{date:i,readingTime:l}=n,o=(0,u.P)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,a.Z)(g.container,"margin-vert--md",t),children:[(0,r.jsx)(x,{date:i,formattedDate:(c=i,o.format(new Date(c)))}),void 0!==l&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(f,{}),(0,r.jsx)(h,{readingTime:l})]})]});var c}var v=n(8059);const j={authorCol:"authorCol_btVC",imageOnlyAuthorRow:"imageOnlyAuthorRow_fBnr",imageOnlyAuthorCol:"imageOnlyAuthorCol_Y2d8"};function b(e){let{className:t}=e;const{metadata:{authors:n},assets:i}=(0,s.nO)();if(0===n.length)return null;const l=n.every((e=>{let{name:t}=e;return!t})),o=1===n.length;return(0,r.jsx)("div",{className:(0,a.Z)("margin-top--md margin-bottom--sm",l?j.imageOnlyAuthorRow:"row",t),children:n.map(((e,t)=>(0,r.jsx)("div",{className:(0,a.Z)(!l&&(o?"col col--12":"col col--6"),l?j.imageOnlyAuthorCol:j.authorCol),children:(0,r.jsx)(v.Z,{author:{...e,imageURL:i.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(p,{}),(0,r.jsx)(b,{})]})}var Z=n(5678),L=n(2714);function y(e){let{children:t,className:n}=e;const{isBlogPostPage:i}=(0,s.nO)();return(0,r.jsx)("div",{id:i?Z.uR:void 0,className:(0,a.Z)("markdown",n),children:(0,r.jsx)(L.Z,{children:t})})}var k=n(3509),C=n(3362),_=n(9813);function T(){return(0,r.jsx)("b",{children:(0,r.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function H(e){const{blogPostTitle:t,...n}=e;return(0,r.jsx)(l.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...n,children:(0,r.jsx)(T,{})})}function O(){const{metadata:e,isBlogPostPage:t}=(0,s.nO)(),{tags:n,title:i,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,u=n.length>0;if(!(u||m||l))return null;if(t){const e=!!(l||d||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[u&&(0,r.jsx)("div",{className:(0,a.Z)("row","margin-top--sm",k.k.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(_.Z,{tags:n})})}),e&&(0,r.jsx)(C.Z,{className:(0,a.Z)("margin-top--sm",k.k.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[u&&(0,r.jsx)("div",{className:(0,a.Z)("col",{"col--9":m}),children:(0,r.jsx)(_.Z,{tags:n})}),m&&(0,r.jsx)("div",{className:(0,a.Z)("col text--right",{"col--3":u}),children:(0,r.jsx)(H,{blogPostTitle:i,to:e.permalink})})]})}function w(e){let{children:t,className:n}=e;const l=function(){const{isBlogPostPage:e}=(0,s.nO)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(i,{className:(0,a.Z)(l,n),children:[(0,r.jsx)(N,{}),(0,r.jsx)(y,{children:t}),(0,r.jsx)(O,{})]})}},6509:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});n(5271);var a=n(4814),s=n(9967),r=n(3509),i=n(5023),l=n(6566),o=n(9449),c=n(2922),d=n(5066),m=n(2676);function u(e){const{nextItem:t,prevItem:n}=e;return(0,m.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[n&&(0,m.jsx)(d.Z,{...n,subLabel:(0,m.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer post"})}),t&&(0,m.jsx)(d.Z,{...t,subLabel:(0,m.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older post"}),isNext:!0})]})}function g(){const{assets:e,metadata:t}=(0,i.nO)(),{title:n,description:a,date:r,tags:l,authors:o,frontMatter:c}=t,{keywords:d}=c,u=e.image??c.image;return(0,m.jsxs)(s.d,{title:n,description:a,keywords:d,image:u,children:[(0,m.jsx)("meta",{property:"og:type",content:"article"}),(0,m.jsx)("meta",{property:"article:published_time",content:r}),o.some((e=>e.url))&&(0,m.jsx)("meta",{property:"article:author",content:o.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,m.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var h=n(2791);function x(){const e=(0,i.iZ)();return(0,m.jsx)(h.Z,{children:(0,m.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var f=n(9298),p=n(1892);function v(e){let{sidebar:t,children:n}=e;const{metadata:a,toc:s}=(0,i.nO)(),{nextItem:r,prevItem:c,frontMatter:d}=a,{hide_table_of_contents:g,toc_min_heading_level:h,toc_max_heading_level:x}=d;return(0,m.jsxs)(l.Z,{sidebar:t,toc:!g&&s.length>0?(0,m.jsx)(f.Z,{toc:s,minHeadingLevel:h,maxHeadingLevel:x}):void 0,children:[(0,m.jsx)(p.Z,{metadata:a}),(0,m.jsx)(o.Z,{children:n}),(r||c)&&(0,m.jsx)(u,{nextItem:r,prevItem:c})]})}function j(e){const t=e.content;return(0,m.jsx)(i.n4,{content:e.content,isBlogPostPage:!0,children:(0,m.jsxs)(s.FG,{className:(0,a.Z)(r.k.wrapper.blogPages,r.k.page.blogPostPage),children:[(0,m.jsx)(g,{}),(0,m.jsx)(x,{}),(0,m.jsx)(v,{sidebar:e.sidebar,children:(0,m.jsx)(t,{})})]})})}},7491:(e,t,n)=>{n.d(t,{Z:()=>c});n(5271);var a=n(4814),s=n(4022),r=n(3509),i=n(44),l=n(2676);function o(e){let{className:t}=e;return(0,l.jsx)(i.Z,{type:"caution",title:(0,l.jsx)(s.cI,{}),className:(0,a.Z)(t,r.k.common.unlistedBanner),children:(0,l.jsx)(s.eU,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.T$,{}),(0,l.jsx)(o,{...e})]})}},1892:(e,t,n)=>{n.d(t,{Z:()=>d});n(5271);var a=n(4814),s=n(4022),r=n(3509),i=n(44),l=n(2676);function o(e){let{className:t}=e;return(0,l.jsx)(i.Z,{type:"caution",title:(0,l.jsx)(s.ht,{}),className:(0,a.Z)(t,r.k.common.draftBanner),children:(0,l.jsx)(s.xo,{})})}var c=n(7491);function d(e){let{metadata:t}=e;const{unlisted:n,frontMatter:a}=t;return(0,l.jsxs)(l.Fragment,{children:[(n||a.unlisted)&&(0,l.jsx)(c.Z,{}),a.draft&&(0,l.jsx)(o,{})]})}},9298:(e,t,n)=>{n.d(t,{Z:()=>c});n(5271);var a=n(4814),s=n(783);const r={tableOfContents:"tableOfContents_tnIz",docItemContainer:"docItemContainer_YM2y"};var i=n(2676);const l="table-of-contents__link toc-highlight",o="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,i.jsx)("div",{className:(0,a.Z)(r.tableOfContents,"thin-scrollbar",t),children:(0,i.jsx)(s.Z,{...n,linkClassName:l,linkActiveClassName:o})})}},783:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(5271),s=n(9364);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):a.push(s)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function l(e){const t=e.getBoundingClientRect();return t.top===t.bottom?l(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>l(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom {e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,a.useRef)(void 0),n=c();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:s,minHeadingLevel:r,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let s=t;s<=n;s+=1)a.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:i}),c=o(l,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(s),e.classList.add(s),t.current=e):e.classList.remove(s)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}var m=n(6527),u=n(2676);function g(e){let{toc:t,className:n,linkClassName:a,isChild:s}=e;return t.length?(0,u.jsx)("ul",{className:s?void 0:n,children:t.map((e=>(0,u.jsxs)("li",{children:[(0,u.jsx)(m.Z,{to:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,u.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:a})]},e.id)))}):null}const h=a.memo(g);function x(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:m,...g}=e;const x=(0,s.L)(),f=c??x.tableOfContents.minHeadingLevel,p=m??x.tableOfContents.maxHeadingLevel,v=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return(0,a.useMemo)((()=>i({toc:r(t),minHeadingLevel:n,maxHeadingLevel:s})),[t,n,s])}({toc:t,minHeadingLevel:f,maxHeadingLevel:p});return d((0,a.useMemo)((()=>{if(l&&o)return{linkClassName:l,linkActiveClassName:o,minHeadingLevel:f,maxHeadingLevel:p}}),[l,o,f,p])),(0,u.jsx)(h,{toc:v,className:n,linkClassName:l,...g})}},4022:(e,t,n)=>{n.d(t,{T$:()=>o,cI:()=>i,eU:()=>l,ht:()=>c,xo:()=>d});n(5271);var a=n(2922),s=n(2791),r=n(2676);function i(){return(0,r.jsx)(a.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,r.jsx)(a.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,r.jsx)(s.Z,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,r.jsx)(a.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,r.jsx)(a.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.55a36fca.js b/assets/js/ccc49370.55a36fca.js new file mode 100644 index 000000000..1344c3bc7 --- /dev/null +++ b/assets/js/ccc49370.55a36fca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3249],{8736:(e,t,n)=>{n.d(t,{A:()=>O});n(758);var a=n(3526),s=n(7073),i=n(6070);function r(e){let{children:t,className:n}=e;return(0,i.jsx)("article",{className:n,children:t})}var l=n(88);const o={title:"title_C9tp"};function c(e){let{className:t}=e;const{metadata:n,isBlogPostPage:r}=(0,s.e7)(),{permalink:c,title:d}=n,m=r?"h1":"h2";return(0,i.jsx)(m,{className:(0,a.A)(o.title,t),children:r?d:(0,i.jsx)(l.A,{to:c,children:d})})}var d=n(8072),m=n(7773),u=n(3886);const h={container:"container_eyWC"};function g(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=(0,m.W)();return t=>{const n=Math.ceil(t);return e(n,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:n}))}}();return(0,i.jsx)(i.Fragment,{children:n(t)})}function f(e){let{date:t,formattedDate:n}=e;return(0,i.jsx)("time",{dateTime:t,children:n})}function x(){return(0,i.jsx)(i.Fragment,{children:" \xb7 "})}function p(e){let{className:t}=e;const{metadata:n}=(0,s.e7)(),{date:r,readingTime:l}=n,o=(0,u.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,i.jsxs)("div",{className:(0,a.A)(h.container,"margin-vert--md",t),children:[(0,i.jsx)(f,{date:r,formattedDate:(c=r,o.format(new Date(c)))}),void 0!==l&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(x,{}),(0,i.jsx)(g,{readingTime:l})]})]});var c}var v=n(5582);const j={authorCol:"authorCol_GZzj",imageOnlyAuthorRow:"imageOnlyAuthorRow_oXEi",imageOnlyAuthorCol:"imageOnlyAuthorCol_kgo0"};function b(e){let{className:t}=e;const{metadata:{authors:n},assets:r}=(0,s.e7)();if(0===n.length)return null;const l=n.every((e=>{let{name:t}=e;return!t})),o=1===n.length;return(0,i.jsx)("div",{className:(0,a.A)("margin-top--md margin-bottom--sm",l?j.imageOnlyAuthorRow:"row",t),children:n.map(((e,t)=>(0,i.jsx)("div",{className:(0,a.A)(!l&&(o?"col col--12":"col col--6"),l?j.imageOnlyAuthorCol:j.authorCol),children:(0,i.jsx)(v.A,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})},t)))})}function A(){return(0,i.jsxs)("header",{children:[(0,i.jsx)(c,{}),(0,i.jsx)(p,{}),(0,i.jsx)(b,{})]})}var N=n(3652),L=n(3416);function y(e){let{children:t,className:n}=e;const{isBlogPostPage:r}=(0,s.e7)();return(0,i.jsx)("div",{id:r?N.LU:void 0,className:(0,a.A)("markdown",n),children:(0,i.jsx)(L.A,{children:t})})}var C=n(8539),T=n(3739),_=n(7304);function k(){return(0,i.jsx)("b",{children:(0,i.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function H(e){const{blogPostTitle:t,...n}=e;return(0,i.jsx)(l.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...n,children:(0,i.jsx)(k,{})})}function w(){const{metadata:e,isBlogPostPage:t}=(0,s.e7)(),{tags:n,title:r,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,u=n.length>0;if(!(u||m||l))return null;if(t){const e=!!(l||d||c);return(0,i.jsxs)("footer",{className:"docusaurus-mt-lg",children:[u&&(0,i.jsx)("div",{className:(0,a.A)("row","margin-top--sm",C.G.blog.blogFooterEditMetaRow),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(_.A,{tags:n})})}),e&&(0,i.jsx)(T.A,{className:(0,a.A)("margin-top--sm",C.G.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,i.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[u&&(0,i.jsx)("div",{className:(0,a.A)("col",{"col--9":m}),children:(0,i.jsx)(_.A,{tags:n})}),m&&(0,i.jsx)("div",{className:(0,a.A)("col text--right",{"col--3":u}),children:(0,i.jsx)(H,{blogPostTitle:r,to:e.permalink})})]})}function O(e){let{children:t,className:n}=e;const l=function(){const{isBlogPostPage:e}=(0,s.e7)();return e?void 0:"margin-bottom--xl"}();return(0,i.jsxs)(r,{className:(0,a.A)(l,n),children:[(0,i.jsx)(A,{}),(0,i.jsx)(y,{children:t}),(0,i.jsx)(w,{})]})}},261:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});n(758);var a=n(3526),s=n(5003),i=n(8539),r=n(7073),l=n(8777),o=n(8736),c=n(8072),d=n(5336),m=n(6070);function u(e){const{nextItem:t,prevItem:n}=e;return(0,m.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.T)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[n&&(0,m.jsx)(d.A,{...n,subLabel:(0,m.jsx)(c.A,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer post"})}),t&&(0,m.jsx)(d.A,{...t,subLabel:(0,m.jsx)(c.A,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older post"}),isNext:!0})]})}function h(){const{assets:e,metadata:t}=(0,r.e7)(),{title:n,description:a,date:i,tags:l,authors:o,frontMatter:c}=t,{keywords:d}=c,u=e.image??c.image;return(0,m.jsxs)(s.be,{title:c.title_meta??n,description:a,keywords:d,image:u,children:[(0,m.jsx)("meta",{property:"og:type",content:"article"}),(0,m.jsx)("meta",{property:"article:published_time",content:i}),o.some((e=>e.url))&&(0,m.jsx)("meta",{property:"article:author",content:o.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,m.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var g=n(950);function f(){const e=(0,r.J_)();return(0,m.jsx)(g.A,{children:(0,m.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var x=n(5686),p=n(9465);function v(e){let{sidebar:t,children:n}=e;const{metadata:a,toc:s}=(0,r.e7)(),{nextItem:i,prevItem:c,frontMatter:d}=a,{hide_table_of_contents:h,toc_min_heading_level:g,toc_max_heading_level:f}=d;return(0,m.jsxs)(l.A,{sidebar:t,toc:!h&&s.length>0?(0,m.jsx)(x.A,{toc:s,minHeadingLevel:g,maxHeadingLevel:f}):void 0,children:[(0,m.jsx)(p.A,{metadata:a}),(0,m.jsx)(o.A,{children:n}),(i||c)&&(0,m.jsx)(u,{nextItem:i,prevItem:c})]})}function j(e){const t=e.content;return(0,m.jsx)(r.in,{content:e.content,isBlogPostPage:!0,children:(0,m.jsxs)(s.e3,{className:(0,a.A)(i.G.wrapper.blogPages,i.G.page.blogPostPage),children:[(0,m.jsx)(h,{}),(0,m.jsx)(f,{}),(0,m.jsx)(v,{sidebar:e.sidebar,children:(0,m.jsx)(t,{})})]})})}},6252:(e,t,n)=>{n.d(t,{A:()=>c});n(758);var a=n(3526),s=n(384),i=n(8539),r=n(2683),l=n(6070);function o(e){let{className:t}=e;return(0,l.jsx)(r.A,{type:"caution",title:(0,l.jsx)(s.Rc,{}),className:(0,a.A)(t,i.G.common.unlistedBanner),children:(0,l.jsx)(s.Uh,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.AE,{}),(0,l.jsx)(o,{...e})]})}},9465:(e,t,n)=>{n.d(t,{A:()=>d});n(758);var a=n(3526),s=n(384),i=n(8539),r=n(2683),l=n(6070);function o(e){let{className:t}=e;return(0,l.jsx)(r.A,{type:"caution",title:(0,l.jsx)(s.Yh,{}),className:(0,a.A)(t,i.G.common.draftBanner),children:(0,l.jsx)(s.TT,{})})}var c=n(6252);function d(e){let{metadata:t}=e;const{unlisted:n,frontMatter:a}=t;return(0,l.jsxs)(l.Fragment,{children:[(n||a.unlisted)&&(0,l.jsx)(c.A,{}),a.draft&&(0,l.jsx)(o,{})]})}},5686:(e,t,n)=>{n.d(t,{A:()=>c});n(758);var a=n(3526),s=n(5215);const i={tableOfContents:"tableOfContents_Mig1",docItemContainer:"docItemContainer_sJth"};var r=n(6070);const l="table-of-contents__link toc-highlight",o="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,a.A)(i.tableOfContents,"thin-scrollbar",t),children:(0,r.jsx)(s.A,{...n,linkClassName:l,linkActiveClassName:o})})}},5215:(e,t,n)=>{n.d(t,{A:()=>f});var a=n(758),s=n(9618);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):a.push(s)})),a}function r(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=r({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function l(e){const t=e.getBoundingClientRect();return t.top===t.bottom?l(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>l(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom {e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,a.useRef)(void 0),n=c();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:s,minHeadingLevel:i,maxHeadingLevel:r}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let s=t;s<=n;s+=1)a.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:i,maxHeadingLevel:r}),c=o(l,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(s),e.classList.add(s),t.current=e):e.classList.remove(s)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}var m=n(88),u=n(6070);function h(e){let{toc:t,className:n,linkClassName:a,isChild:s}=e;return t.length?(0,u.jsx)("ul",{className:s?void 0:n,children:t.map((e=>(0,u.jsxs)("li",{children:[(0,u.jsx)(m.A,{to:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,u.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:a})]},e.id)))}):null}const g=a.memo(h);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:m,...h}=e;const f=(0,s.p)(),x=c??f.tableOfContents.minHeadingLevel,p=m??f.tableOfContents.maxHeadingLevel,v=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return(0,a.useMemo)((()=>r({toc:i(t),minHeadingLevel:n,maxHeadingLevel:s})),[t,n,s])}({toc:t,minHeadingLevel:x,maxHeadingLevel:p});return d((0,a.useMemo)((()=>{if(l&&o)return{linkClassName:l,linkActiveClassName:o,minHeadingLevel:x,maxHeadingLevel:p}}),[l,o,x,p])),(0,u.jsx)(g,{toc:v,className:n,linkClassName:l,...h})}},384:(e,t,n)=>{n.d(t,{AE:()=>o,Rc:()=>r,TT:()=>d,Uh:()=>l,Yh:()=>c});n(758);var a=n(8072),s=n(950),i=n(6070);function r(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,i.jsx)(s.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/cd59c184.1f43baeb.js b/assets/js/cd59c184.1f43baeb.js new file mode 100644 index 000000000..b6292a43a --- /dev/null +++ b/assets/js/cd59c184.1f43baeb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9272],{3784:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>n,toc:()=>u});var n=a(4852),l=a(6070),i=a(8591);const o={title:"GameVault+ out now",authors:["alfagun74"],tags:["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},r=void 0,s={authorsImageUrls:[void 0]},u=[];function m(e){const t={p:"p",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.p,{children:"Hey everyone!"}),"\n",(0,l.jsx)(t.p,{children:"We're thrilled to announce that the early access phase of GameVault+ has concluded, and we're officially launching it today! It's been an incredible journey from the inception of GameVault to where we are now, and we couldn't have done it without your amazing support."}),"\n",(0,l.jsx)(t.p,{children:"GameVault+ is our way of saying thank you to our dedicated supporters while also ensuring the sustainability of our platform. For a small monthly fee, you'll gain access to premium features designed to enhance your gaming experience within GameVault. We're starting with features like animated profile pictures, custom themes, and activation of the GameVault Client API, with more exciting additions planned for the future."}),"\n",(0,l.jsx)(t.p,{children:"But our work doesn't stop here. We're committed to refining GameVault+ based on your feedback, as well as addressing key areas of improvement in the platform. This includes exploring partnerships with reputable video game databases to enhance our data offerings and refactoring our client application for optimal performance."}),"\n",(0,l.jsx)(t.p,{children:"And most importantly, we want you, our community, to have a say in the future direction of GameVault. That's why we're opening up the floor for feature suggestions through our Discord channel. Your input will help shape the next big updates to GameVault."}),"\n",(0,l.jsx)(t.p,{children:"Thank you all for your support and enthusiasm. We're excited to continue this journey with you and to make gaming even more enjoyable for everyone. Stay tuned for more updates, and happy gaming!"})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(m,{...e})}):m(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>r});var n=a(758);const l={},i=n.createContext(l);function o(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),n.createElement(i.Provider,{value:t},e.children)}},4852:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/04/14/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-14.md","source":"@site/blog/2024-04-14.md","title":"GameVault+ out now","description":"Hey everyone!","date":"2024-04-14T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"DRM-free","permalink":"/blog/tags/drm-free"},{"inline":true,"label":"video games","permalink":"/blog/tags/video-games"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription","permalink":"/blog/tags/subscription"},{"inline":true,"label":"community-driven","permalink":"/blog/tags/community-driven"},{"inline":true,"label":"updates","permalink":"/blog/tags/updates"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"early access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"release","permalink":"/blog/tags/release"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"sustainability","permalink":"/blog/tags/sustainability"},{"inline":true,"label":"partnerships","permalink":"/blog/tags/partnerships"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"development","permalink":"/blog/tags/development"}],"readingTime":1.18,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault+ out now","authors":["alfagun74"],"tags":["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},"unlisted":false,"prevItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"},"nextItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"}}')}}]); \ No newline at end of file diff --git a/assets/js/cd59c184.9ebb86c4.js b/assets/js/cd59c184.9ebb86c4.js deleted file mode 100644 index 4d6537b04..000000000 --- a/assets/js/cd59c184.9ebb86c4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3112],{1634:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var n=t(2676),l=t(8358);const i={title:"GameVault+ out now",authors:["alfagun74"],tags:["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},o=void 0,r={permalink:"/blog/2024/04/14/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-14.md",source:"@site/blog/2024-04-14.md",title:"GameVault+ out now",description:"Hey everyone!",date:"2024-04-14T00:00:00.000Z",tags:[{inline:!0,label:"gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"self-hosted",permalink:"/blog/tags/self-hosted"},{inline:!0,label:"platform",permalink:"/blog/tags/platform"},{inline:!0,label:"DRM-free",permalink:"/blog/tags/drm-free"},{inline:!0,label:"video games",permalink:"/blog/tags/video-games"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"GameVault+",permalink:"/blog/tags/game-vault"},{inline:!0,label:"subscription",permalink:"/blog/tags/subscription"},{inline:!0,label:"community-driven",permalink:"/blog/tags/community-driven"},{inline:!0,label:"updates",permalink:"/blog/tags/updates"},{inline:!0,label:"announcement",permalink:"/blog/tags/announcement"},{inline:!0,label:"early access",permalink:"/blog/tags/early-access"},{inline:!0,label:"release",permalink:"/blog/tags/release"},{inline:!0,label:"features",permalink:"/blog/tags/features"},{inline:!0,label:"sustainability",permalink:"/blog/tags/sustainability"},{inline:!0,label:"partnerships",permalink:"/blog/tags/partnerships"},{inline:!0,label:"Discord",permalink:"/blog/tags/discord"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"improvement",permalink:"/blog/tags/improvement"},{inline:!0,label:"development",permalink:"/blog/tags/development"}],readingTime:1.18,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"GameVault+ out now",authors:["alfagun74"],tags:["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},unlisted:!1,prevItem:{title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",permalink:"/blog/2024/05/07/"},nextItem:{title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",permalink:"/blog/2024/04/01/2024-04-01/"}},s={authorsImageUrls:[void 0]},u=[];function m(e){const a={p:"p",...(0,l.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey everyone!"}),"\n",(0,n.jsx)(a.p,{children:"We're thrilled to announce that the early access phase of GameVault+ has concluded, and we're officially launching it today! It's been an incredible journey from the inception of GameVault to where we are now, and we couldn't have done it without your amazing support."}),"\n",(0,n.jsx)(a.p,{children:"GameVault+ is our way of saying thank you to our dedicated supporters while also ensuring the sustainability of our platform. For a small monthly fee, you'll gain access to premium features designed to enhance your gaming experience within GameVault. We're starting with features like animated profile pictures, custom themes, and activation of the GameVault Client API, with more exciting additions planned for the future."}),"\n",(0,n.jsx)(a.p,{children:"But our work doesn't stop here. We're committed to refining GameVault+ based on your feedback, as well as addressing key areas of improvement in the platform. This includes exploring partnerships with reputable video game databases to enhance our data offerings and refactoring our client application for optimal performance."}),"\n",(0,n.jsx)(a.p,{children:"And most importantly, we want you, our community, to have a say in the future direction of GameVault. That's why we're opening up the floor for feature suggestions through our Discord channel. Your input will help shape the next big updates to GameVault."}),"\n",(0,n.jsx)(a.p,{children:"Thank you all for your support and enthusiasm. We're excited to continue this journey with you and to make gaming even more enjoyable for everyone. Stay tuned for more updates, and happy gaming!"})]})}function p(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>r,a:()=>o});var n=t(5271);const l={},i=n.createContext(l);function o(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cd781ce1.7f1fa5b9.js b/assets/js/cd781ce1.48e7f549.js similarity index 83% rename from assets/js/cd781ce1.7f1fa5b9.js rename to assets/js/cd781ce1.48e7f549.js index 45ec06746..3359ce2c6 100644 --- a/assets/js/cd781ce1.7f1fa5b9.js +++ b/assets/js/cd781ce1.48e7f549.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9230],{2343:a=>{a.exports=JSON.parse('{"tag":{"label":"voting","permalink":"/blog/tags/voting","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/voting","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1377],{1138:a=>{a.exports=JSON.parse('{"tag":{"label":"voting","permalink":"/blog/tags/voting","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/voting","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/cddec16f.5cd77676.js b/assets/js/cddec16f.5cd77676.js new file mode 100644 index 000000000..49facb22c --- /dev/null +++ b/assets/js/cddec16f.5cd77676.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2275],{5240:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"server-docs/setup/native","title":"Using Native Approach","description":"Container technology presents an efficient and scalable solution by encapsulating applications and their dependencies. This ensures consistent performance across diverse environments and streamlines deployment, management, and scalability.","source":"@site/docs/server-docs/setup/native.md","sourceDirName":"server-docs/setup","slug":"/server-docs/setup/native","permalink":"/docs/server-docs/setup/native","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/native.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":99,"frontMatter":{"title":"Using Native Approach","sidebar_position":99},"sidebar":"docs","previous":{"title":"Using TrueNAS Scale - Legacy","permalink":"/docs/server-docs/setup/truenas-scale-legacy"},"next":{"title":"Configuration","permalink":"/docs/server-docs/configuration"}}');var i=s(6070),r=s(8591);const a={title:"Using Native Approach",sidebar_position:99},l=void 0,o={},d=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Step 1: Clone the Source Code",id:"step-1-clone-the-source-code",level:3},{value:"Step 2: Install Dependencies",id:"step-2-install-dependencies",level:3},{value:"Step 3: Set up an .env File",id:"step-3-set-up-an-env-file",level:3},{value:"Step 4: Build and Start the Server",id:"step-4-build-and-start-the-server",level:3},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Updating the Server",id:"updating-the-server",level:3}];function c(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Container technology presents an efficient and scalable solution by encapsulating applications and their dependencies. This ensures consistent performance across diverse environments and streamlines deployment, management, and scalability."}),"\n",(0,i.jsx)(n.p,{children:"Although we strongly discourage it, if none of the alternative installation methods are suitable for you, GameVault can also be installed directly on your system without using containers. The example provided here uses Debian."}),"\n",(0,i.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nodejs.org/",children:"Node.js"})," must be installed on your system (check the required version ",(0,i.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-backend/blob/master/Dockerfile#L1",children:"here"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.postgresql.org/",children:"PostgreSQL"})," database (or configure SQLITE later on)."]}),"\n",(0,i.jsxs)(n.li,{children:["Install necessary packages: ",(0,i.jsx)(n.a,{href:"https://packages.debian.org/en/sid/p7zip-full",children:(0,i.jsx)(n.code,{children:"p7zip-full"})})," and ",(0,i.jsx)(n.a,{href:"https://packages.debian.org/en/sid/p7zip-rar",children:(0,i.jsx)(n.code,{children:"p7zip-rar"})})," (non-free-repository) (or their equivalents in your distribution)."]}),"\n",(0,i.jsxs)(n.li,{children:["Install the ",(0,i.jsx)(n.a,{href:"https://pnpm.io/",children:"parallel node package manager"}),": ",(0,i.jsx)(n.code,{children:"npm i -g pnpm"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"step-1-clone-the-source-code",children:"Step 1: Clone the Source Code"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~\ngit clone https://github.com/Phalcode/gamevault-backend.git\ncd gamevault-backend\n"})}),"\n",(0,i.jsx)(n.h3,{id:"step-2-install-dependencies",children:"Step 2: Install Dependencies"}),"\n",(0,i.jsx)(n.p,{children:"Now we need to install all necessary node dependencies."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pnpm install\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Your server files are now in the ",(0,i.jsx)(n.code,{children:"dist/"})," folder."]}),"\n",(0,i.jsx)(n.h3,{id:"step-3-set-up-an-env-file",children:"Step 3: Set up an .env File"}),"\n",(0,i.jsxs)(n.p,{children:["Create a .env file in the ",(0,i.jsx)(n.code,{children:"dist/src/"})," directory and ",(0,i.jsx)(n.a,{href:"/docs/server-docs/configuration",children:"configure your GameVault as desired"})," or set them in your system/VM directly."]}),"\n",(0,i.jsx)(n.p,{children:"Example with SQLITE:"}),"\n",(0,i.jsx)(n.p,{children:"First create the necessary folders or just use existing ones in your config:"}),"\n",(0,i.jsx)(n.p,{children:"For example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~\nmkdir -p gamevault-db gamevault-media gamevault-games gamevault-logs gamevault-plugins\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ini",children:"#/gamevault-backend/.env\nDB_SYSTEM=SQLITE\nVOLUMES_SQLITEDB=/path/for/database/files\nVOLUMES_FILES=/path/for/gane/files\nVOLUMES_MEDIA=/path/for/media/files\nVOLUMES_LOGS=/path/for/log/files\nVOLUMES_PLUGINS=/path/for/plugin/files\n"})}),"\n",(0,i.jsx)(n.h3,{id:"step-4-build-and-start-the-server",children:"Step 4: Build and Start the Server"}),"\n",(0,i.jsx)(n.p,{children:"To start the server, run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pnpm start\n"})}),"\n",(0,i.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,i.jsx)(n.p,{children:"You have now successfully set up your GameVault Server."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,i.jsx)(n.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,i.jsx)(n.p,{children:"Don't put/change anything except the .env file inside the gamevault-backend folder if you don't know what you're doing."}),"\n",(0,i.jsx)(n.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,i.jsx)(n.p,{children:"Press CTRL + C to stop the server."}),"\n",(0,i.jsx)(n.h3,{id:"updating-the-server",children:"Updating the Server"}),"\n",(0,i.jsx)(n.p,{children:"You can update the server by running"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git pull\n"})}),"\n",(0,i.jsx)(n.p,{children:"inside of your gamevault-backend git repository. It will auto update to the latest version."}),"\n",(0,i.jsx)(n.p,{children:"You can update to a specific version by using:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git fetch --all --tags --prune\ngit checkout tags/9.0.0\n"})}),"\n",(0,i.jsx)(n.p,{children:"for example."})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>l});var t=s(758);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cddec16f.9b0e6a28.js b/assets/js/cddec16f.9b0e6a28.js deleted file mode 100644 index ad4fd122c..000000000 --- a/assets/js/cddec16f.9b0e6a28.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5316],{3964:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=s(2676),i=s(8358);const r={title:"Using Native Approach",sidebar_position:99},a=void 0,l={id:"server-docs/setup/native",title:"Using Native Approach",description:"Container technology presents an efficient and scalable solution by encapsulating applications and their dependencies. This ensures consistent performance across diverse environments and streamlines deployment, management, and scalability.",source:"@site/docs/server-docs/setup/native.md",sourceDirName:"server-docs/setup",slug:"/server-docs/setup/native",permalink:"/docs/server-docs/setup/native",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/native.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:99,frontMatter:{title:"Using Native Approach",sidebar_position:99},sidebar:"docs",previous:{title:"Using Synology Container Manager",permalink:"/docs/server-docs/setup/synology-container-manager"},next:{title:"Configuration",permalink:"/docs/server-docs/configuration"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:3},{value:"Step 1: Clone the Source Code",id:"step-1-clone-the-source-code",level:3},{value:"Step 2: Install Dependencies",id:"step-2-install-dependencies",level:3},{value:"Step 3: Set up an .env File",id:"step-3-set-up-an-env-file",level:3},{value:"Step 4: Build and Start the Server",id:"step-4-build-and-start-the-server",level:3},{value:"Conclusion",id:"conclusion",level:2},{value:"Additional Info",id:"additional-info",level:2},{value:"Stopping the Server",id:"stopping-the-server",level:3},{value:"Updating the Server",id:"updating-the-server",level:3}];function c(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Container technology presents an efficient and scalable solution by encapsulating applications and their dependencies. This ensures consistent performance across diverse environments and streamlines deployment, management, and scalability."}),"\n",(0,t.jsx)(n.p,{children:"Although we strongly discourage it, if none of the alternative installation methods are suitable for you, GameVault can also be installed directly on your system without using containers. The example provided here uses Debian."}),"\n",(0,t.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://nodejs.org/",children:"Node.js"})," must be installed on your system (check the required version ",(0,t.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-backend/blob/master/Dockerfile#L1",children:"here"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://www.postgresql.org/",children:"PostgreSQL"})," database (or configure SQLITE later on)."]}),"\n",(0,t.jsxs)(n.li,{children:["Install necessary packages: ",(0,t.jsx)(n.a,{href:"https://packages.debian.org/en/sid/p7zip-full",children:(0,t.jsx)(n.code,{children:"p7zip-full"})})," and ",(0,t.jsx)(n.a,{href:"https://packages.debian.org/en/sid/p7zip-rar",children:(0,t.jsx)(n.code,{children:"p7zip-rar"})})," (non-free-repository) (or their equivalents in your distribution)."]}),"\n",(0,t.jsxs)(n.li,{children:["Install the ",(0,t.jsx)(n.a,{href:"https://pnpm.io/",children:"parallel node package manager"}),": ",(0,t.jsx)(n.code,{children:"npm i -g pnpm"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"step-1-clone-the-source-code",children:"Step 1: Clone the Source Code"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd ~\ngit clone https://github.com/Phalcode/gamevault-backend.git\ncd gamevault-backend\n"})}),"\n",(0,t.jsx)(n.h3,{id:"step-2-install-dependencies",children:"Step 2: Install Dependencies"}),"\n",(0,t.jsx)(n.p,{children:"Now we need to install all necessary node dependencies."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm install\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Your server files are now in the ",(0,t.jsx)(n.code,{children:"dist/"})," folder."]}),"\n",(0,t.jsx)(n.h3,{id:"step-3-set-up-an-env-file",children:"Step 3: Set up an .env File"}),"\n",(0,t.jsxs)(n.p,{children:["Create a .env file in the ",(0,t.jsx)(n.code,{children:"dist/src/"})," directory and ",(0,t.jsx)(n.a,{href:"/docs/server-docs/configuration",children:"configure your GameVault as desired"})," or set them in your system/VM directly."]}),"\n",(0,t.jsx)(n.p,{children:"Example with SQLITE:"}),"\n",(0,t.jsx)(n.p,{children:"First create the necessary folders or just use existing ones in your config:"}),"\n",(0,t.jsx)(n.p,{children:"For example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd ~\nmkdir -p gamevault-db gamevault-media gamevault-games gamevault-logs gamevault-plugins\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ini",children:"#/gamevault-backend/.env\nDB_SYSTEM=SQLITE\nVOLUMES_SQLITEDB=/path/for/database/files\nVOLUMES_FILES=/path/for/gane/files\nVOLUMES_MEDIA=/path/for/media/files\nVOLUMES_LOGS=/path/for/log/files\nVOLUMES_PLUGINS=/path/for/plugin/files\n"})}),"\n",(0,t.jsx)(n.h3,{id:"step-4-build-and-start-the-server",children:"Step 4: Build and Start the Server"}),"\n",(0,t.jsx)(n.p,{children:"To start the server, run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"pnpm start\n"})}),"\n",(0,t.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsx)(n.p,{children:"You have now successfully set up your GameVault Server."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"/docs/server-docs/setup/#what-next",children:"Click here to continue."})}),"\n",(0,t.jsx)(n.h2,{id:"additional-info",children:"Additional Info"}),"\n",(0,t.jsx)(n.p,{children:"Don't put/change anything except the .env file inside the gamevault-backend folder if you don't know what you're doing."}),"\n",(0,t.jsx)(n.h3,{id:"stopping-the-server",children:"Stopping the Server"}),"\n",(0,t.jsx)(n.p,{children:"Press CTRL + C to stop the server."}),"\n",(0,t.jsx)(n.h3,{id:"updating-the-server",children:"Updating the Server"}),"\n",(0,t.jsx)(n.p,{children:"You can update the server by running"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git pull\n"})}),"\n",(0,t.jsx)(n.p,{children:"inside of your gamevault-backend git repository. It will auto update to the latest version."}),"\n",(0,t.jsx)(n.p,{children:"You can update to a specific version by using:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git fetch --all --tags --prune\ngit checkout tags/9.0.0\n"})}),"\n",(0,t.jsx)(n.p,{children:"for example."})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8358:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>a});var t=s(5271);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cee5390f.9f718f82.js b/assets/js/cee5390f.9f718f82.js new file mode 100644 index 000000000..e84d6cad8 --- /dev/null +++ b/assets/js/cee5390f.9f718f82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5339],{6775:a=>{a.exports=JSON.parse('{"tag":{"label":"UI Update","permalink":"/blog/tags/ui-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/ui-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/cee5390f.f67a1ea1.js b/assets/js/cee5390f.f67a1ea1.js deleted file mode 100644 index d5481e773..000000000 --- a/assets/js/cee5390f.f67a1ea1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[691],{9724:a=>{a.exports=JSON.parse('{"tag":{"label":"UI Update","permalink":"/blog/tags/ui-update","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/ui-update","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d527dda4.0a77982f.js b/assets/js/d527dda4.cac907b5.js similarity index 85% rename from assets/js/d527dda4.0a77982f.js rename to assets/js/d527dda4.cac907b5.js index a787610b8..82e1950b0 100644 --- a/assets/js/d527dda4.0a77982f.js +++ b/assets/js/d527dda4.cac907b5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7416],{5239:a=>{a.exports=JSON.parse('{"tag":{"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/coding-chronicle","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4440],{7926:a=>{a.exports=JSON.parse('{"tag":{"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/coding-chronicle","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d53cd084.a3a38eaf.js b/assets/js/d53cd084.a3a38eaf.js new file mode 100644 index 000000000..9e580128e --- /dev/null +++ b/assets/js/d53cd084.a3a38eaf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1504],{6997:a=>{a.exports=JSON.parse('{"tag":{"label":"parental control","permalink":"/blog/tags/parental-control","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/parental-control","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d53cd084.b0b81414.js b/assets/js/d53cd084.b0b81414.js deleted file mode 100644 index cfacda4ef..000000000 --- a/assets/js/d53cd084.b0b81414.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3585],{481:a=>{a.exports=JSON.parse('{"tag":{"label":"parental control","permalink":"/blog/tags/parental-control","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/parental-control","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d5823966.0056e9ed.js b/assets/js/d5823966.0056e9ed.js deleted file mode 100644 index afd5d6f60..000000000 --- a/assets/js/d5823966.0056e9ed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7262],{6572:a=>{a.exports=JSON.parse('{"tag":{"label":"features","permalink":"/blog/tags/features","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/features","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d5823966.67f766a6.js b/assets/js/d5823966.67f766a6.js new file mode 100644 index 000000000..95cdfa164 --- /dev/null +++ b/assets/js/d5823966.67f766a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3088],{628:a=>{a.exports=JSON.parse('{"tag":{"label":"features","permalink":"/blog/tags/features","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/features","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d5dcebd7.b19bddcc.js b/assets/js/d5dcebd7.b19bddcc.js new file mode 100644 index 000000000..af7a6b26f --- /dev/null +++ b/assets/js/d5dcebd7.b19bddcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6659],{4810:a=>{a.exports=JSON.parse('{"tag":{"label":"new name","permalink":"/blog/tags/new-name","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/new-name","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d5dcebd7.f25b04b3.js b/assets/js/d5dcebd7.f25b04b3.js deleted file mode 100644 index a9063f814..000000000 --- a/assets/js/d5dcebd7.f25b04b3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[187],{678:a=>{a.exports=JSON.parse('{"tag":{"label":"new name","permalink":"/blog/tags/new-name","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/new-name","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d6138fd2.106d7fa0.js b/assets/js/d6138fd2.62ca3aaa.js similarity index 84% rename from assets/js/d6138fd2.106d7fa0.js rename to assets/js/d6138fd2.62ca3aaa.js index 37d531f61..53d08125c 100644 --- a/assets/js/d6138fd2.106d7fa0.js +++ b/assets/js/d6138fd2.62ca3aaa.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7471],{4368:e=>{e.exports=JSON.parse('{"tag":{"label":"user engagement","permalink":"/blog/tags/user-engagement","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/user-engagement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9329],{5064:e=>{e.exports=JSON.parse('{"tag":{"label":"user engagement","permalink":"/blog/tags/user-engagement","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/user-engagement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d82a1228.49eaf640.js b/assets/js/d82a1228.6c869c2d.js similarity index 84% rename from assets/js/d82a1228.49eaf640.js rename to assets/js/d82a1228.6c869c2d.js index b6ed0bc34..10d08bfb6 100644 --- a/assets/js/d82a1228.49eaf640.js +++ b/assets/js/d82a1228.6c869c2d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5050],{8846:a=>{a.exports=JSON.parse('{"tag":{"label":"early access","permalink":"/blog/tags/early-access","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/early-access","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3867],{6850:a=>{a.exports=JSON.parse('{"tag":{"label":"early access","permalink":"/blog/tags/early-access","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/early-access","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d9341347.89897fd7.js b/assets/js/d9341347.9c7e846f.js similarity index 85% rename from assets/js/d9341347.89897fd7.js rename to assets/js/d9341347.9c7e846f.js index dac71a190..cd56f3e3b 100644 --- a/assets/js/d9341347.89897fd7.js +++ b/assets/js/d9341347.9c7e846f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9490],{7995:t=>{t.exports=JSON.parse('{"tag":{"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/multi-user-authentication","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2680],{9622:t=>{t.exports=JSON.parse('{"tag":{"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/multi-user-authentication","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/d9d4e1f1.1cec48e6.js b/assets/js/d9d4e1f1.1cec48e6.js new file mode 100644 index 000000000..16343f08e --- /dev/null +++ b/assets/js/d9d4e1f1.1cec48e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8987],{1384:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>g,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var a=n(8348),o=n(6070),l=n(8591);const r={title:"A Look Back and a Glimpse Forward",authors:["alfagun74"],tags:["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},s=void 0,i={authorsImageUrls:[void 0]},u=[];function m(e){const t={a:"a",p:"p",...(0,l.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hello,"}),"\n",(0,o.jsxs)(t.p,{children:["It's been a while since we caught up here, but if you've been following the action on ",(0,o.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", you're up to speed. Nevertheless, this blog remains your spot for the key updates and announements."]})]})}function g(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>s});var a=n(758);const o={},l=a.createContext(o);function r(e){const t=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(l.Provider,{value:t},e.children)}},8348:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/11/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-11-20.md","source":"@site/blog/2023-11-20.md","title":"A Look Back and a Glimpse Forward","description":"Hello,","date":"2023-11-20T00:00:00.000Z","tags":[{"inline":true,"label":"Game Development","permalink":"/blog/tags/game-development"},{"inline":true,"label":"Software Updates","permalink":"/blog/tags/software-updates"},{"inline":true,"label":"Gaming Community","permalink":"/blog/tags/gaming-community"},{"inline":true,"label":"UI Redesign","permalink":"/blog/tags/ui-redesign"},{"inline":true,"label":"Development Milestones","permalink":"/blog/tags/development-milestones"},{"inline":true,"label":"Tech Progress","permalink":"/blog/tags/tech-progress"},{"inline":true,"label":"Future Features","permalink":"/blog/tags/future-features"},{"inline":true,"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey"},{"inline":true,"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle"},{"inline":true,"label":"November Update","permalink":"/blog/tags/november-update"}],"readingTime":2.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A Look Back and a Glimpse Forward","authors":["alfagun74"],"tags":["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},"unlisted":false,"prevItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"},"nextItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"}}')}}]); \ No newline at end of file diff --git a/assets/js/d9d4e1f1.ca60091f.js b/assets/js/d9d4e1f1.ca60091f.js deleted file mode 100644 index 2f2a7898f..000000000 --- a/assets/js/d9d4e1f1.ca60091f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5300],{8256:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>g,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var a=n(2676),o=n(8358);const l={title:"A Look Back and a Glimpse Forward",authors:["alfagun74"],tags:["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},r=void 0,i={permalink:"/blog/2023/11/20/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-11-20.md",source:"@site/blog/2023-11-20.md",title:"A Look Back and a Glimpse Forward",description:"Hello,",date:"2023-11-20T00:00:00.000Z",tags:[{inline:!0,label:"Game Development",permalink:"/blog/tags/game-development"},{inline:!0,label:"Software Updates",permalink:"/blog/tags/software-updates"},{inline:!0,label:"Gaming Community",permalink:"/blog/tags/gaming-community"},{inline:!0,label:"UI Redesign",permalink:"/blog/tags/ui-redesign"},{inline:!0,label:"Development Milestones",permalink:"/blog/tags/development-milestones"},{inline:!0,label:"Tech Progress",permalink:"/blog/tags/tech-progress"},{inline:!0,label:"Future Features",permalink:"/blog/tags/future-features"},{inline:!0,label:"GameVault Journey",permalink:"/blog/tags/game-vault-journey"},{inline:!0,label:"Coding Chronicle",permalink:"/blog/tags/coding-chronicle"},{inline:!0,label:"November Update",permalink:"/blog/tags/november-update"}],readingTime:2.26,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"A Look Back and a Glimpse Forward",authors:["alfagun74"],tags:["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},unlisted:!1,prevItem:{title:"Join the GameVault Early-Access Program Now!",permalink:"/blog/2023/12/09/"},nextItem:{title:"Please help us prioritize!",permalink:"/blog/2023/07/29/"}},s={authorsImageUrls:[void 0]},u=[];function m(e){const t={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hello,"}),"\n",(0,a.jsxs)(t.p,{children:["It's been a while since we caught up here, but if you've been following the action on ",(0,a.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),", you're up to speed. Nevertheless, this blog remains your spot for the key updates and announements."]})]})}function g(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(m,{...e})}):m(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>r});var a=n(5271);const o={},l=a.createContext(o);function r(e){const t=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),a.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/daddf69a.ddeb214e.js b/assets/js/daddf69a.0725d0c4.js similarity index 85% rename from assets/js/daddf69a.ddeb214e.js rename to assets/js/daddf69a.0725d0c4.js index 158590a29..34c93ce2a 100644 --- a/assets/js/daddf69a.ddeb214e.js +++ b/assets/js/daddf69a.0725d0c4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5548],{3169:a=>{a.exports=JSON.parse('{"tag":{"label":"Gaming Community","permalink":"/blog/tags/gaming-community","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-community","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2256],{4674:a=>{a.exports=JSON.parse('{"tag":{"label":"Gaming Community","permalink":"/blog/tags/gaming-community","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/gaming-community","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/daf02673.5a456591.js b/assets/js/daf02673.4057a387.js similarity index 83% rename from assets/js/daf02673.5a456591.js rename to assets/js/daf02673.4057a387.js index 5e8cc61ce..6592af9f7 100644 --- a/assets/js/daf02673.5a456591.js +++ b/assets/js/daf02673.4057a387.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3581],{6061:a=>{a.exports=JSON.parse('{"tag":{"label":"public","permalink":"/blog/tags/public","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/public","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8022],{8461:a=>{a.exports=JSON.parse('{"tag":{"label":"public","permalink":"/blog/tags/public","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/public","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/db0b0363.58be98a7.js b/assets/js/db0b0363.58be98a7.js deleted file mode 100644 index e3a62d443..000000000 --- a/assets/js/db0b0363.58be98a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2805],{8513:a=>{a.exports=JSON.parse('{"tag":{"label":"software licensing","permalink":"/blog/tags/software-licensing","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software-licensing","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/db0b0363.fc6187f6.js b/assets/js/db0b0363.fc6187f6.js new file mode 100644 index 000000000..6ea6b5ccf --- /dev/null +++ b/assets/js/db0b0363.fc6187f6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9],{5674:a=>{a.exports=JSON.parse('{"tag":{"label":"software licensing","permalink":"/blog/tags/software-licensing","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software-licensing","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/dc8e8e39.1af3101c.js b/assets/js/dc8e8e39.1af3101c.js new file mode 100644 index 000000000..eb1723a90 --- /dev/null +++ b/assets/js/dc8e8e39.1af3101c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[488],{5102:a=>{a.exports=JSON.parse('{"tag":{"label":"community","permalink":"/blog/tags/community","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/dc8e8e39.610e2592.js b/assets/js/dc8e8e39.610e2592.js deleted file mode 100644 index 85b244b06..000000000 --- a/assets/js/dc8e8e39.610e2592.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1736],{2252:a=>{a.exports=JSON.parse('{"tag":{"label":"community","permalink":"/blog/tags/community","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/community","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/dcb9a9e8.91cdfa5f.js b/assets/js/dcb9a9e8.91cdfa5f.js new file mode 100644 index 000000000..b20790920 --- /dev/null +++ b/assets/js/dcb9a9e8.91cdfa5f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8190],{4608:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"advanced-usage/linux-client","title":"Running the Client on Linux","description":"This page serves as a community-driven guide to assist you in setting up the GameVault client on Linux.","source":"@site/docs/advanced-usage/linux-client.md","sourceDirName":"advanced-usage","slug":"/advanced-usage/linux-client","permalink":"/docs/advanced-usage/linux-client","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/linux-client.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Configuring Fail2Ban for GameVault","permalink":"/docs/advanced-usage/fail2ban-gamevault-guide"},"next":{"title":"Running the Client on Steamdeck","permalink":"/docs/advanced-usage/steamdeck"}}');var s=t(6070),a=t(8591);const l={},o="Running the Client on Linux",d={},c=[{value:"Getting the application",id:"getting-the-application",level:2},{value:"Setting up with Wine",id:"setting-up-with-wine",level:2},{value:"Setting up with Bottles",id:"setting-up-with-bottles",level:2},{value:"Updating the Client",id:"updating-the-client",level:2},{value:"Known issues",id:"known-issues",level:2}];function r(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"running-the-client-on-linux",children:"Running the Client on Linux"})}),"\n",(0,s.jsx)(n.p,{children:"This page serves as a community-driven guide to assist you in setting up the GameVault client on Linux."}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Please note that running GameVault on Linux using this method is considered ",(0,s.jsx)(n.strong,{children:"unsupported"})," and ",(0,s.jsx)(n.strong,{children:"unrecommended"}),". It should only be utilized as a last resort when no other options are available."]})}),"\n",(0,s.jsx)(n.h2,{id:"getting-the-application",children:"Getting the application"}),"\n",(0,s.jsxs)(n.p,{children:["To start, you need the Application files. The simplest way to get them is explained ",(0,s.jsx)(n.a,{href:"/docs/client-docs/setup#option-1-obtain-pre-built-artifacts-from-github",children:"here"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"setting-up-with-wine",children:"Setting up with Wine"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Install Wine and winetricks"}),"\n",(0,s.jsxs)(n.li,{children:["Run ",(0,s.jsx)(n.code,{children:"winetricks dotnetdesktop6"})," in a terminal"]}),"\n",(0,s.jsxs)(n.li,{children:["Launch ",(0,s.jsx)(n.code,{children:"gamevault.exe"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"setting-up-with-bottles",children:"Setting up with Bottles"}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsx)(n.p,{children:"When using Bottles under flatpak, your data will be in the following directory:"}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"~/.var/app/com.usebottles.bottles/data/bottles/[YOUR BOTTLE NAME]"})}),(0,s.jsx)(n.p,{children:"Keep that in mind when unpacking games to install them."})]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Install ",(0,s.jsx)(n.a,{href:"https://usebottles.com/",children:"Bottles"})]}),"\n",(0,s.jsxs)(n.li,{children:["Create a new bottle",(0,s.jsx)(n.br,{}),"\n",(0,s.jsx)(n.img,{alt:"Creating a new Bottle",src:t(2618).A+"",width:"672",height:"559"})]}),"\n",(0,s.jsxs)(n.li,{children:["Inside your bottle click ",(0,s.jsx)(n.code,{children:"Dependencies"})," and install ",(0,s.jsx)(n.code,{children:"dotnetcoredesktop6"}),(0,s.jsx)(n.br,{}),"\n",(0,s.jsx)(n.img,{alt:"Configuring the .NET Core Dependency",src:t(7850).A+"",width:"1920",height:"1042"})]}),"\n",(0,s.jsxs)(n.li,{children:["Go back to the main page for your bottle and press ",(0,s.jsx)(n.code,{children:"Run Executable..."})," and select ",(0,s.jsx)(n.code,{children:"gamevault.exe"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"updating-the-client",children:"Updating the Client"}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Since there is currently no auto-update functionality available (as mentioned in ",(0,s.jsx)(n.a,{href:"/docs/client-docs/updating-client#other-sources",children:"this link"}),"), it is your responsibility to manually update your GameVault client. To update your client, you will need to repeat the procedure in this documentation."]})}),"\n",(0,s.jsx)(n.h2,{id:"known-issues",children:"Known issues"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Text can look very broken if certain fonts are not installed on your system.","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If you're on Arch Linux, ",(0,s.jsx)(n.a,{href:"https://aur.archlinux.org/packages/ttf-ms-win11-auto",children:"this"})," AUR package fixes the issue."]}),"\n",(0,s.jsxs)(n.li,{children:["If you're on Debian, you could try to use ",(0,s.jsx)(n.a,{href:"https://packages.debian.org/ttf-mscorefonts-installer",children:"this"})," package. (untested)"]}),"\n",(0,s.jsxs)(n.li,{children:["Additionally - you can also try ",(0,s.jsx)(n.a,{href:"https://archive.org/details/windows-11-21h2-complete-font-collection",children:"this"})," and install it to your wine prefix's fonts folder ~/.wine/drive_c/windows/Fonts ; This works on the steamdeck"]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(r,{...e})}):r(e)}},7850:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/dotnet-394a9ce8159950d1b64fc6831db7a59c.png"},2618:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/make_bottle-0aa58e120e66831b38d8c7cc6584b087.png"},8591:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>o});var i=t(758);const s={},a=i.createContext(s);function l(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dcb9a9e8.b7f433a5.js b/assets/js/dcb9a9e8.b7f433a5.js deleted file mode 100644 index 4ec10ec17..000000000 --- a/assets/js/dcb9a9e8.b7f433a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4758],{2160:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var i=t(2676),s=t(8358);const a={},l="Running the Client on Linux",o={id:"advanced-usage/linux-client",title:"Running the Client on Linux",description:"This page serves as a community-driven guide to assist you in setting up the GameVault client on Linux.",source:"@site/docs/advanced-usage/linux-client.md",sourceDirName:"advanced-usage",slug:"/advanced-usage/linux-client",permalink:"/docs/advanced-usage/linux-client",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/linux-client.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,frontMatter:{},sidebar:"docs",previous:{title:"Configuring Fail2Ban for GameVault",permalink:"/docs/advanced-usage/fail2ban-gamevault-guide"},next:{title:"Running the Client on Steamdeck",permalink:"/docs/advanced-usage/steamdeck"}},d={},c=[{value:"Getting the application",id:"getting-the-application",level:2},{value:"Setting up with Wine",id:"setting-up-with-wine",level:2},{value:"Setting up with Bottles",id:"setting-up-with-bottles",level:2},{value:"Updating the Client",id:"updating-the-client",level:2},{value:"Known issues",id:"known-issues",level:2}];function r(e){const n={a:"a",admonition:"admonition",br:"br",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"running-the-client-on-linux",children:"Running the Client on Linux"})}),"\n",(0,i.jsx)(n.p,{children:"This page serves as a community-driven guide to assist you in setting up the GameVault client on Linux."}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Please note that running GameVault on Linux using this method is considered ",(0,i.jsx)(n.strong,{children:"unsupported"})," and ",(0,i.jsx)(n.strong,{children:"unrecommended"}),". It should only be utilized as a last resort when no other options are available."]})}),"\n",(0,i.jsx)(n.h2,{id:"getting-the-application",children:"Getting the application"}),"\n",(0,i.jsxs)(n.p,{children:["To start, you need the Application files. The simplest way to get them is explained ",(0,i.jsx)(n.a,{href:"/docs/client-docs/setup#option-1-obtain-pre-built-artifacts-from-github",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"setting-up-with-wine",children:"Setting up with Wine"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Install Wine and winetricks"}),"\n",(0,i.jsxs)(n.li,{children:["Run ",(0,i.jsx)(n.code,{children:"winetricks dotnetdesktop6"})," in a terminal"]}),"\n",(0,i.jsxs)(n.li,{children:["Launch ",(0,i.jsx)(n.code,{children:"gamevault.exe"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"setting-up-with-bottles",children:"Setting up with Bottles"}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsx)(n.p,{children:"When using Bottles under flatpak, your data will be in the following directory:"}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"~/.var/app/com.usebottles.bottles/data/bottles/[YOUR BOTTLE NAME]"})}),(0,i.jsx)(n.p,{children:"Keep that in mind when unpacking games to install them."})]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Install ",(0,i.jsx)(n.a,{href:"https://usebottles.com/",children:"Bottles"})]}),"\n",(0,i.jsxs)(n.li,{children:["Create a new bottle",(0,i.jsx)(n.br,{}),"\n",(0,i.jsx)(n.img,{alt:"Creating a new Bottle",src:t(9299).Z+"",width:"672",height:"559"})]}),"\n",(0,i.jsxs)(n.li,{children:["Inside your bottle click ",(0,i.jsx)(n.code,{children:"Dependencies"})," and install ",(0,i.jsx)(n.code,{children:"dotnetcoredesktop6"}),(0,i.jsx)(n.br,{}),"\n",(0,i.jsx)(n.img,{alt:"Configuring the .NET Core Dependency",src:t(3211).Z+"",width:"1920",height:"1042"})]}),"\n",(0,i.jsxs)(n.li,{children:["Go back to the main page for your bottle and press ",(0,i.jsx)(n.code,{children:"Run Executable..."})," and select ",(0,i.jsx)(n.code,{children:"gamevault.exe"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"updating-the-client",children:"Updating the Client"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Since there is currently no auto-update functionality available (as mentioned in ",(0,i.jsx)(n.a,{href:"/docs/client-docs/updating-client#other-sources",children:"this link"}),"), it is your responsibility to manually update your GameVault client. To update your client, you will need to repeat the procedure in this documentation."]})}),"\n",(0,i.jsx)(n.h2,{id:"known-issues",children:"Known issues"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Text can look very broken if certain fonts are not installed on your system.","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you're on Arch Linux, ",(0,i.jsx)(n.a,{href:"https://aur.archlinux.org/packages/ttf-ms-win11-auto",children:"this"})," AUR package fixes the issue."]}),"\n",(0,i.jsxs)(n.li,{children:["If you're on Debian, you could try to use ",(0,i.jsx)(n.a,{href:"https://packages.debian.org/ttf-mscorefonts-installer",children:"this"})," package. (untested)"]}),"\n",(0,i.jsxs)(n.li,{children:["Additionally - you can also try ",(0,i.jsx)(n.a,{href:"https://archive.org/details/windows-11-21h2-complete-font-collection",children:"this"})," and install it to your wine prefix's fonts folder ~/.wine/drive_c/windows/Fonts ; This works on the steamdeck"]}),"\n"]}),"\n"]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(r,{...e})}):r(e)}},3211:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/dotnet-394a9ce8159950d1b64fc6831db7a59c.png"},9299:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/make_bottle-0aa58e120e66831b38d8c7cc6584b087.png"},8358:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>l});var i=t(5271);const s={},a=i.createContext(s);function l(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dd9b1d9d.cac59609.js b/assets/js/dd9b1d9d.cac59609.js new file mode 100644 index 000000000..0197d1f80 --- /dev/null +++ b/assets/js/dd9b1d9d.cac59609.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1822],{1251:s=>{s.exports=JSON.parse('{"tag":{"label":"success","permalink":"/blog/tags/success","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/success","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/defc3e62.9ac48b07.js b/assets/js/defc3e62.d5c0ecdf.js similarity index 84% rename from assets/js/defc3e62.9ac48b07.js rename to assets/js/defc3e62.d5c0ecdf.js index 08b836755..bd5a565f1 100644 --- a/assets/js/defc3e62.9ac48b07.js +++ b/assets/js/defc3e62.d5c0ecdf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4412],{7917:a=>{a.exports=JSON.parse('{"tag":{"label":"sustainability","permalink":"/blog/tags/sustainability","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/sustainability","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2251],{7761:a=>{a.exports=JSON.parse('{"tag":{"label":"sustainability","permalink":"/blog/tags/sustainability","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/sustainability","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/df8deb2d.883a1740.js b/assets/js/df8deb2d.e9f844a5.js similarity index 85% rename from assets/js/df8deb2d.883a1740.js rename to assets/js/df8deb2d.e9f844a5.js index 863a1f8a5..ee46a4ac0 100644 --- a/assets/js/df8deb2d.883a1740.js +++ b/assets/js/df8deb2d.e9f844a5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8860],{9731:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-milestone","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8530],{8878:a=>{a.exports=JSON.parse('{"tag":{"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/game-vault-milestone","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e07621e3.a0c440aa.js b/assets/js/e07621e3.a0c440aa.js new file mode 100644 index 000000000..1d165a694 --- /dev/null +++ b/assets/js/e07621e3.a0c440aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2220],{2:a=>{a.exports=JSON.parse('{"tag":{"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/love-for-game-vault","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e07621e3.ddae9e66.js b/assets/js/e07621e3.ddae9e66.js deleted file mode 100644 index dd1d34d33..000000000 --- a/assets/js/e07621e3.ddae9e66.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6182],{1865:a=>{a.exports=JSON.parse('{"tag":{"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/love-for-game-vault","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e0a15777.1e8cc06c.js b/assets/js/e0a15777.8c230e7e.js similarity index 85% rename from assets/js/e0a15777.1e8cc06c.js rename to assets/js/e0a15777.8c230e7e.js index 7fd80bb4e..f7418d121 100644 --- a/assets/js/e0a15777.1e8cc06c.js +++ b/assets/js/e0a15777.8c230e7e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9737],{9859:e=>{e.exports=JSON.parse('{"tag":{"label":"revenue generation","permalink":"/blog/tags/revenue-generation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/revenue-generation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4160],{6413:e=>{e.exports=JSON.parse('{"tag":{"label":"revenue generation","permalink":"/blog/tags/revenue-generation","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/revenue-generation","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e0c5798e.308752ac.js b/assets/js/e0c5798e.308752ac.js deleted file mode 100644 index e3756d92a..000000000 --- a/assets/js/e0c5798e.308752ac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[339],{8801:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var a=n(2676),o=n(8358);const i={title:"Announcing GameVault+ (coming soon)",authors:["alfagun74"],tags:["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},l=void 0,s={permalink:"/blog/2024/03/28/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-03-28.md",source:"@site/blog/2024-03-28.md",title:"Announcing GameVault+ (coming soon)",description:"Hey Everyone!",date:"2024-03-28T00:00:00.000Z",tags:[{inline:!0,label:"startup",permalink:"/blog/tags/startup"},{inline:!0,label:"software",permalink:"/blog/tags/software"},{inline:!0,label:"gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"subscription model",permalink:"/blog/tags/subscription-model"},{inline:!0,label:"development",permalink:"/blog/tags/development"},{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"announcement",permalink:"/blog/tags/announcement"}],readingTime:3.725,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Announcing GameVault+ (coming soon)",authors:["alfagun74"],tags:["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},unlisted:!1,prevItem:{title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",permalink:"/blog/2024/04/01/2024-04-01/"},nextItem:{title:"Join the GameVault Early-Access Program Now!",permalink:"/blog/2023/12/09/"}},r={authorsImageUrls:[void 0]},u=[{value:"GameVault+",id:"gamevault",level:2},{value:"What is GameVault+?",id:"what-is-gamevault",level:2},{value:"So what's next?",id:"so-whats-next",level:2}];function d(e){const t={a:"a",em:"em",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,a.jsxs)(t.p,{children:["It feels like it's been ages since we last caught up regarding the development of ",(0,a.jsx)(t.a,{href:"https://gamevau.lt",children:"GameVault (the self-hostable platform for drm-free videogames)"}),", but trust me, the silence from our end doesn't mean we've been slacking off. In fact,quite the opposite has been happening behind the scenes. "]}),"\n",(0,a.jsx)(t.p,{children:"When my friend and I first launched this application, it was born out of a simple need for a solution to a problem we thought was very particular and only for ourselves. Having a steam-like platform for game files lying on my home server."}),"\n",(0,a.jsx)(t.p,{children:"We never imagined it would resonate with others or find its own place in the market. Frankly, we thought it might end up just another forgotten repository on GitHub, gathering virtual dust with no one paying it any mind."}),"\n",(0,a.jsx)(t.p,{children:"But boy, were we wrong. The response to our app was unexpectedly large and overwhelming. Thousands of people are using GameVault today, and it seems there's quite a demand out there for the exact product we've been building."}),"\n",(0,a.jsxs)(t.p,{children:["We\u2019re a small indie team of two and despite juggling multiple jobs, we've poured our hearts and souls into this project during our spare times, striving to offer a self-hosted alternative to the gaming platforms out there. And while we've received some generous donations (",(0,a.jsx)(t.em,{children:"shoutout to our two loyal monthly donors btw \u2013 you know who you are, and we're endlessly grateful!"}),"), it's clear that relying solely on sporadic tips isn't sustainable for the long term and we need financial support to maintain our services and justify our time investment towards our families."]}),"\n",(0,a.jsxs)(t.p,{children:["So, it's time for a slight change. We're thrilled to announce the upcoming release of a new version of our client application, complete with an ",(0,a.jsx)(t.strong,{children:"optional"})," subscription model we're calling..."]}),"\n",(0,a.jsx)(t.h2,{id:"gamevault",children:(0,a.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction",children:"GameVault+"})}),"\n",(0,a.jsx)(t.h2,{id:"what-is-gamevault",children:"What is GameVault+?"}),"\n",(0,a.jsx)(t.p,{children:"First, to clear some of the confusion:"}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:'No, this is not some shady scammy "We\'re going enterprise" rugpull'}),".\nThe core of GameVaults upcoming features and the features you enjoyed until now will always remain free. Additionally the system is ",(0,a.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction/#what-if-i-cant-afford-gamevault",children:"designed to be easily bypassed if you can't or dont want to afford it."})]}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues/151",children:"It was long planned on our board and well discussed within our community"}),". Think of ",(0,a.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction",children:"GameVault+"}),' as our way of saying "thank you" to our supporters and to motivate them to support us regularly. To be more specific, it\'s us giving back some goodie-features that are not necessarily needed to use GameVault back to our supporters, while they help us keep the lights on here at Phalcode.']}),"\n",(0,a.jsx)(t.p,{children:"With GameVault+, you'll gain access to premium nice-to-have features designed to enhance your GameVault experience, all for a small monthly fee of \u20ac4,99 monthly or \u20ac49.90 anually."}),"\n",(0,a.jsx)(t.p,{children:"Currently, these features include:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Uploading animated profile pictures"}),"\n",(0,a.jsx)(t.li,{children:"Applying Custom Themes"}),"\n",(0,a.jsx)(t.li,{children:"Activation of the GameVault Client API (CLI, URI, and NamedPipe Interfaces Used for client integrations with 3rd party tools like Playnite)"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"But there are more to come! We will be enhancing this offering with more features, whenever we see room for it, as GameVault+ subscribers are the ones, who keep this project alive."}),"\n",(0,a.jsxs)(t.p,{children:["All details and a Q&A are on the ",(0,a.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction",children:"GameVault+ page"}),"."]}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"We'll be rolling out this new product today to our early access users first"})," to get the product and the infrastructure around it tested, tweaking and refining it based on your feedback before making it available to everyone. It's an exciting new chapter for us, and we can't wait to have you along for the ride."]}),"\n",(0,a.jsx)(t.h2,{id:"so-whats-next",children:"So what's next?"}),"\n",(0,a.jsx)(t.p,{children:"We will polish the rough edges of GameVault+ and bring it to life in the next few weeks, hopefully. You will probably already see some documentation on this website for it. Keep in mind, this is all a work in progress, and we will announce the final release soon."}),"\n",(0,a.jsxs)(t.p,{children:["After that, we will need to urgently find a solution to our heavy reliance on the ",(0,a.jsx)(t.a,{href:"https://discord.com/channels/1100920639667306496/1134496308846137404/1217726870959820861",children:"degrading and unmaintained RAWG Database"}),". We are already in contact for potential partnerships with Video-Game Databases."]}),"\n",(0,a.jsx)(t.p,{children:"Finally, we will need to do some refactoring of our client application's architecture."}),"\n",(0,a.jsxs)(t.p,{children:["But stay tuned because once all of this is done, the Next Big Feature we'll be focusing on will be open for ",(0,a.jsx)(t.strong,{children:"the community to decide"})," in ",(0,a.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"our #polls channel on Discord"}),'. So make sure to join "The Council" to get notified and vote on your most desired feature.']}),"\n",(0,a.jsx)(t.p,{children:"Thank you all for supporting us and looking forward to seeing you all on our next updates!"})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>l});var a=n(5271);const o={},i=a.createContext(o);function l(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),a.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e0c5798e.3f7cd1d9.js b/assets/js/e0c5798e.3f7cd1d9.js new file mode 100644 index 000000000..87a40da67 --- /dev/null +++ b/assets/js/e0c5798e.3f7cd1d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7125],{1568:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var a=n(3696),o=n(6070),i=n(8591);const l={title:"Announcing GameVault+ (coming soon)",authors:["alfagun74"],tags:["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},s=void 0,r={authorsImageUrls:[void 0]},u=[{value:"GameVault+",id:"gamevault",level:2},{value:"What is GameVault+?",id:"what-is-gamevault",level:2},{value:"So what's next?",id:"so-whats-next",level:2}];function d(e){const t={a:"a",em:"em",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hey Everyone!"}),"\n",(0,o.jsxs)(t.p,{children:["It feels like it's been ages since we last caught up regarding the development of ",(0,o.jsx)(t.a,{href:"https://gamevau.lt",children:"GameVault (the self-hostable platform for drm-free videogames)"}),", but trust me, the silence from our end doesn't mean we've been slacking off. In fact,quite the opposite has been happening behind the scenes. "]}),"\n",(0,o.jsx)(t.p,{children:"When my friend and I first launched this application, it was born out of a simple need for a solution to a problem we thought was very particular and only for ourselves. Having a steam-like platform for game files lying on my home server."}),"\n",(0,o.jsx)(t.p,{children:"We never imagined it would resonate with others or find its own place in the market. Frankly, we thought it might end up just another forgotten repository on GitHub, gathering virtual dust with no one paying it any mind."}),"\n",(0,o.jsx)(t.p,{children:"But boy, were we wrong. The response to our app was unexpectedly large and overwhelming. Thousands of people are using GameVault today, and it seems there's quite a demand out there for the exact product we've been building."}),"\n",(0,o.jsxs)(t.p,{children:["We\u2019re a small indie team of two and despite juggling multiple jobs, we've poured our hearts and souls into this project during our spare times, striving to offer a self-hosted alternative to the gaming platforms out there. And while we've received some generous donations (",(0,o.jsx)(t.em,{children:"shoutout to our two loyal monthly donors btw \u2013 you know who you are, and we're endlessly grateful!"}),"), it's clear that relying solely on sporadic tips isn't sustainable for the long term and we need financial support to maintain our services and justify our time investment towards our families."]}),"\n",(0,o.jsxs)(t.p,{children:["So, it's time for a slight change. We're thrilled to announce the upcoming release of a new version of our client application, complete with an ",(0,o.jsx)(t.strong,{children:"optional"})," subscription model we're calling..."]}),"\n",(0,o.jsx)(t.h2,{id:"gamevault",children:(0,o.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction",children:"GameVault+"})}),"\n",(0,o.jsx)(t.h2,{id:"what-is-gamevault",children:"What is GameVault+?"}),"\n",(0,o.jsx)(t.p,{children:"First, to clear some of the confusion:"}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:'No, this is not some shady scammy "We\'re going enterprise" rugpull'}),".\nThe core of GameVaults upcoming features and the features you enjoyed until now will always remain free. Additionally the system is ",(0,o.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction/#what-if-i-cant-afford-gamevault",children:"designed to be easily bypassed if you can't or dont want to afford it."})]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues/151",children:"It was long planned on our board and well discussed within our community"}),". Think of ",(0,o.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction",children:"GameVault+"}),' as our way of saying "thank you" to our supporters and to motivate them to support us regularly. To be more specific, it\'s us giving back some goodie-features that are not necessarily needed to use GameVault back to our supporters, while they help us keep the lights on here at Phalcode.']}),"\n",(0,o.jsx)(t.p,{children:"With GameVault+, you'll gain access to premium nice-to-have features designed to enhance your GameVault experience, all for a small monthly fee of \u20ac4,99 monthly or \u20ac49.90 anually."}),"\n",(0,o.jsx)(t.p,{children:"Currently, these features include:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Uploading animated profile pictures"}),"\n",(0,o.jsx)(t.li,{children:"Applying Custom Themes"}),"\n",(0,o.jsx)(t.li,{children:"Activation of the GameVault Client API (CLI, URI, and NamedPipe Interfaces Used for client integrations with 3rd party tools like Playnite)"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"But there are more to come! We will be enhancing this offering with more features, whenever we see room for it, as GameVault+ subscribers are the ones, who keep this project alive."}),"\n",(0,o.jsxs)(t.p,{children:["All details and a Q&A are on the ",(0,o.jsx)(t.a,{href:"https://gamevau.lt/docs/gamevault-plus/introduction",children:"GameVault+ page"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"We'll be rolling out this new product today to our early access users first"})," to get the product and the infrastructure around it tested, tweaking and refining it based on your feedback before making it available to everyone. It's an exciting new chapter for us, and we can't wait to have you along for the ride."]}),"\n",(0,o.jsx)(t.h2,{id:"so-whats-next",children:"So what's next?"}),"\n",(0,o.jsx)(t.p,{children:"We will polish the rough edges of GameVault+ and bring it to life in the next few weeks, hopefully. You will probably already see some documentation on this website for it. Keep in mind, this is all a work in progress, and we will announce the final release soon."}),"\n",(0,o.jsxs)(t.p,{children:["After that, we will need to urgently find a solution to our heavy reliance on the ",(0,o.jsx)(t.a,{href:"https://discord.com/channels/1100920639667306496/1134496308846137404/1217726870959820861",children:"degrading and unmaintained RAWG Database"}),". We are already in contact for potential partnerships with Video-Game Databases."]}),"\n",(0,o.jsx)(t.p,{children:"Finally, we will need to do some refactoring of our client application's architecture."}),"\n",(0,o.jsxs)(t.p,{children:["But stay tuned because once all of this is done, the Next Big Feature we'll be focusing on will be open for ",(0,o.jsx)(t.strong,{children:"the community to decide"})," in ",(0,o.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"our #polls channel on Discord"}),'. So make sure to join "The Council" to get notified and vote on your most desired feature.']}),"\n",(0,o.jsx)(t.p,{children:"Thank you all for supporting us and looking forward to seeing you all on our next updates!"})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>l,x:()=>s});var a=n(758);const o={},i=a.createContext(o);function l(e){const t=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),a.createElement(i.Provider,{value:t},e.children)}},3696:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/03/28/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-03-28.md","source":"@site/blog/2024-03-28.md","title":"Announcing GameVault+ (coming soon)","description":"Hey Everyone!","date":"2024-03-28T00:00:00.000Z","tags":[{"inline":true,"label":"startup","permalink":"/blog/tags/startup"},{"inline":true,"label":"software","permalink":"/blog/tags/software"},{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription model","permalink":"/blog/tags/subscription-model"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"}],"readingTime":3.725,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Announcing GameVault+ (coming soon)","authors":["alfagun74"],"tags":["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},"unlisted":false,"prevItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"},"nextItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"}}')}}]); \ No newline at end of file diff --git a/assets/js/e0da75fc.c716281e.js b/assets/js/e0da75fc.c716281e.js new file mode 100644 index 000000000..64ccf0e0d --- /dev/null +++ b/assets/js/e0da75fc.c716281e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6328],{4903:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>r});const i=JSON.parse('{"id":"advanced-usage/steamdeck","title":"Running the Client on Steamdeck","description":"This page serves as a community-driven guide to assist you in setting up the GameVault client on SteamOS.","source":"@site/docs/advanced-usage/steamdeck.md","sourceDirName":"advanced-usage","slug":"/advanced-usage/steamdeck","permalink":"/docs/advanced-usage/steamdeck","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/steamdeck.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Running the Client on Linux","permalink":"/docs/advanced-usage/linux-client"},"next":{"title":"Introduction","permalink":"/docs/gamevault-plus/introduction"}}');var s=t(6070),a=t(8591);const o={},d="Running the Client on Steamdeck",l={},r=[{value:"App Setup Guide",id:"app-setup-guide",level:2},{value:"Updating the Client",id:"updating-the-client",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"running-the-client-on-steamdeck",children:"Running the Client on Steamdeck"})}),"\n",(0,s.jsx)(n.p,{children:"This page serves as a community-driven guide to assist you in setting up the GameVault client on SteamOS."}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Please note that running GameVault on Linux using this method is considered ",(0,s.jsx)(n.strong,{children:"unsupported"})," and ",(0,s.jsx)(n.strong,{children:"unrecommended"}),"."]})}),"\n",(0,s.jsx)(n.h2,{id:"app-setup-guide",children:"App Setup Guide"}),"\n",(0,s.jsxs)(n.p,{children:["To start, you need the Application files. The simplest way to get them is explained ",(0,s.jsx)(n.a,{href:"/docs/client-docs/setup#option-1-obtain-pre-built-artifacts-from-github",children:"here"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Download the latest version of the GameVault app ",(0,s.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-app/releases",children:"here"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Download .NET from ",(0,s.jsx)(n.a,{href:"https://download.visualstudio.microsoft.com/download/pr/3136e217-e5b7-4899-9b7e-aa52ecb8b108/d74134edaa75e3300f8692660b9fb7b5/windowsdesktop-runtime-6.0.26-win-x64.exe",children:"here"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Download fonts from ",(0,s.jsx)(n.a,{href:"https://archive.org/details/windows-11-21h2-complete-font-collection",children:"here"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Unzip the GameVault application where you want the application to live."}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"Where you place the app is where it will install windows portable apps. Make sure you have enough space."})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add ",(0,s.jsx)(n.code,{children:"gamevault.exe"})," to Steam library as a non-steam game (This is important for the proton compdata appid... or so I've been told)."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change game compatibility properties to use your preferred version of proton."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Change the target of the Non-steam game to the .NET installer."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Run the game via Steam."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install .NET."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Change the target of the Non-steam game to the ",(0,s.jsx)(n.code,{children:"gamevault.exe"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Find the Compdata folder ",(0,s.jsx)(n.code,{children:"/home/deck/.local/share/steam/steamapps/compatdata/GAMEAPPIDNUMBER/"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsx)(n.p,{children:"Easiest way to find this is to install and run protontricks in the discover store. Mine is 3860686742"})}),"\n",(0,s.jsxs)(n.ol,{start:"12",children:["\n",(0,s.jsxs)(n.li,{children:["Unzip fonts downloaded from archive.org and install to ",(0,s.jsx)(n.code,{children:"/home/deck/.local/share/steam/steamapps/compatdata/GAMEAPPIDNUMBER/pfx/drive_c/windows/Fonts"}),". (specifically Segoe UI)"]}),"\n",(0,s.jsx)(n.li,{children:"Run GameVault via Steam"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"updating-the-client",children:"Updating the Client"}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Since there is currently no auto-update functionality available (as mentioned in ",(0,s.jsx)(n.a,{href:"/docs/client-docs/updating-client#other-sources",children:"this link"}),"), it is your responsibility to manually update your GameVault client. To update your client, you will need to repeat the procedure in this documentation."]})})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8591:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>d});var i=t(758);const s={},a=i.createContext(s);function o(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e0da75fc.d480b18e.js b/assets/js/e0da75fc.d480b18e.js deleted file mode 100644 index ecd14ee62..000000000 --- a/assets/js/e0da75fc.d480b18e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2656],{7282:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>r});var i=t(2676),s=t(8358);const a={},o="Running the Client on Steamdeck",d={id:"advanced-usage/steamdeck",title:"Running the Client on Steamdeck",description:"This page serves as a community-driven guide to assist you in setting up the GameVault client on SteamOS.",source:"@site/docs/advanced-usage/steamdeck.md",sourceDirName:"advanced-usage",slug:"/advanced-usage/steamdeck",permalink:"/docs/advanced-usage/steamdeck",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/steamdeck.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,frontMatter:{},sidebar:"docs",previous:{title:"Running the Client on Linux",permalink:"/docs/advanced-usage/linux-client"},next:{title:"Introduction",permalink:"/docs/gamevault-plus/introduction"}},l={},r=[{value:"App Setup Guide",id:"app-setup-guide",level:2},{value:"Updating the Client",id:"updating-the-client",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"running-the-client-on-steamdeck",children:"Running the Client on Steamdeck"})}),"\n",(0,i.jsx)(n.p,{children:"This page serves as a community-driven guide to assist you in setting up the GameVault client on SteamOS."}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Please note that running GameVault on Linux using this method is considered ",(0,i.jsx)(n.strong,{children:"unsupported"})," and ",(0,i.jsx)(n.strong,{children:"unrecommended"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"app-setup-guide",children:"App Setup Guide"}),"\n",(0,i.jsxs)(n.p,{children:["To start, you need the Application files. The simplest way to get them is explained ",(0,i.jsx)(n.a,{href:"/docs/client-docs/setup#option-1-obtain-pre-built-artifacts-from-github",children:"here"}),"."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Download the latest version of the GameVault app ",(0,i.jsx)(n.a,{href:"https://github.com/Phalcode/gamevault-app/releases",children:"here"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Download .NET from ",(0,i.jsx)(n.a,{href:"https://download.visualstudio.microsoft.com/download/pr/3136e217-e5b7-4899-9b7e-aa52ecb8b108/d74134edaa75e3300f8692660b9fb7b5/windowsdesktop-runtime-6.0.26-win-x64.exe",children:"here"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Download fonts from ",(0,i.jsx)(n.a,{href:"https://archive.org/details/windows-11-21h2-complete-font-collection",children:"here"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Unzip the GameVault application where you want the application to live."}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"Where you place the app is where it will install windows portable apps. Make sure you have enough space."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"gamevault.exe"})," to Steam library as a non-steam game (This is important for the proton compdata appid... or so I've been told)."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Change game compatibility properties to use your preferred version of proton."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Change the target of the Non-steam game to the .NET installer."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the game via Steam."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install .NET."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Change the target of the Non-steam game to the ",(0,i.jsx)(n.code,{children:"gamevault.exe"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Find the Compdata folder ",(0,i.jsx)(n.code,{children:"/home/deck/.local/share/steam/steamapps/compatdata/GAMEAPPIDNUMBER/"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Easiest way to find this is to install and run protontricks in the discover store. Mine is 3860686742"})}),"\n",(0,i.jsxs)(n.ol,{start:"12",children:["\n",(0,i.jsxs)(n.li,{children:["Unzip fonts downloaded from archive.org and install to ",(0,i.jsx)(n.code,{children:"/home/deck/.local/share/steam/steamapps/compatdata/GAMEAPPIDNUMBER/pfx/drive_c/windows/Fonts"}),". (specifically Segoe UI)"]}),"\n",(0,i.jsx)(n.li,{children:"Run GameVault via Steam"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"updating-the-client",children:"Updating the Client"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Since there is currently no auto-update functionality available (as mentioned in ",(0,i.jsx)(n.a,{href:"/docs/client-docs/updating-client#other-sources",children:"this link"}),"), it is your responsibility to manually update your GameVault client. To update your client, you will need to repeat the procedure in this documentation."]})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8358:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>o});var i=t(5271);const s={},a=i.createContext(s);function o(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e3409e91.e86d8c6e.js b/assets/js/e3409e91.e86d8c6e.js new file mode 100644 index 000000000..8a0defd65 --- /dev/null +++ b/assets/js/e3409e91.e86d8c6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6231],{210:a=>{a.exports=JSON.parse('{"tag":{"label":"Discord","permalink":"/blog/tags/discord","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/discord","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e3409e91.eb63e05e.js b/assets/js/e3409e91.eb63e05e.js deleted file mode 100644 index a2e2c3497..000000000 --- a/assets/js/e3409e91.eb63e05e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1180],{3687:a=>{a.exports=JSON.parse('{"tag":{"label":"Discord","permalink":"/blog/tags/discord","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/discord","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e46b1034.9a2f7372.js b/assets/js/e46b1034.9a2f7372.js deleted file mode 100644 index a1c0e7449..000000000 --- a/assets/js/e46b1034.9a2f7372.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[386],{1940:a=>{a.exports=JSON.parse('{"tag":{"label":"partnerships","permalink":"/blog/tags/partnerships","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/partnerships","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e46b1034.f34d4248.js b/assets/js/e46b1034.f34d4248.js new file mode 100644 index 000000000..78725a8a8 --- /dev/null +++ b/assets/js/e46b1034.f34d4248.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1182],{2382:a=>{a.exports=JSON.parse('{"tag":{"label":"partnerships","permalink":"/blog/tags/partnerships","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/partnerships","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e4878929.194117b7.js b/assets/js/e4878929.194117b7.js new file mode 100644 index 000000000..fb78dd8ca --- /dev/null +++ b/assets/js/e4878929.194117b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7933],{3121:t=>{t.exports=JSON.parse('{"tag":{"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/discord-community-growth","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e4878929.b897a783.js b/assets/js/e4878929.b897a783.js deleted file mode 100644 index 035ec0c31..000000000 --- a/assets/js/e4878929.b897a783.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[765],{1169:t=>{t.exports=JSON.parse('{"tag":{"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/discord-community-growth","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e5c4b825.37ebd851.js b/assets/js/e5c4b825.37ebd851.js deleted file mode 100644 index 66bdb3186..000000000 --- a/assets/js/e5c4b825.37ebd851.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5658],{9564:a=>{a.exports=JSON.parse('{"tag":{"label":"migration finalization","permalink":"/blog/tags/migration-finalization","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/migration-finalization","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e5c4b825.b941335b.js b/assets/js/e5c4b825.b941335b.js new file mode 100644 index 000000000..f41bd613b --- /dev/null +++ b/assets/js/e5c4b825.b941335b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[933],{8003:a=>{a.exports=JSON.parse('{"tag":{"label":"migration finalization","permalink":"/blog/tags/migration-finalization","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/migration-finalization","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e623129a.cdbc5f94.js b/assets/js/e623129a.13650692.js similarity index 84% rename from assets/js/e623129a.cdbc5f94.js rename to assets/js/e623129a.13650692.js index c60bb16b7..6cd8ee8ff 100644 --- a/assets/js/e623129a.cdbc5f94.js +++ b/assets/js/e623129a.13650692.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3251],{5569:e=>{e.exports=JSON.parse('{"tag":{"label":"Future Features","permalink":"/blog/tags/future-features","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/future-features","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9508],{5353:e=>{e.exports=JSON.parse('{"tag":{"label":"Future Features","permalink":"/blog/tags/future-features","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/future-features","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e6a59d41.1d566c42.js b/assets/js/e6a59d41.1d566c42.js deleted file mode 100644 index f737b1b13..000000000 --- a/assets/js/e6a59d41.1d566c42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[356],{4244:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var s=n(2676),i=n(8358);const r={sidebar_position:6},a="User Management",o={id:"server-docs/user-management",title:"User Management",description:"This documentation provides instructions on user management for the GameVault server. User management involves configuring the initial admin user, enabling/disabling user registration, managing user activation, and assigning roles. These features are crucial for controlling user access, maintaining security, and administering the server effectively.",source:"@site/docs/server-docs/user-management.md",sourceDirName:"server-docs",slug:"/server-docs/user-management",permalink:"/docs/server-docs/user-management",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/user-management.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"docs",previous:{title:"Updating Games",permalink:"/docs/server-docs/updating-games"},next:{title:"Game Indexing",permalink:"/docs/server-docs/indexing"}},d={},l=[{value:"Admin User",id:"admin-user",level:2},{value:"Initial Setup",id:"initial-setup",level:3},{value:"Admin Role Recovery",id:"admin-role-recovery",level:2},{value:"Admin Password Recovery",id:"admin-password-recovery",level:2},{value:"User Registration",id:"user-registration",level:2},{value:"User Activation",id:"user-activation",level:2},{value:"User Roles",id:"user-roles",level:2}];function c(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"user-management",children:"User Management"})}),"\n",(0,s.jsx)(t.p,{children:"This documentation provides instructions on user management for the GameVault server. User management involves configuring the initial admin user, enabling/disabling user registration, managing user activation, and assigning roles. These features are crucial for controlling user access, maintaining security, and administering the server effectively."}),"\n",(0,s.jsx)(t.h2,{id:"admin-user",children:"Admin User"}),"\n",(0,s.jsx)(t.h3,{id:"initial-setup",children:"Initial Setup"}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsx)(t.p,{children:"GameVault does not register the first admin account for you. You will need to do that yourself."})}),"\n",(0,s.jsx)(t.p,{children:"The first registered user on a server is automatically activated and granted admin permissions. You can register it using the GameVault Client Application."}),"\n",(0,s.jsx)(t.h2,{id:"admin-role-recovery",children:"Admin Role Recovery"}),"\n",(0,s.jsxs)(t.p,{children:["If you lost your admin permissions due to misconfiguration, you can fix this by using the ",(0,s.jsx)(t.code,{children:"SERVER_ADMIN_USERNAME"})," environment variable. Simply set this variable to the username of the user you wish to elevate to admin role. Upon server startup, GameVault will automatically grant admin permissions to the specified username provided in this configuration variable."]}),"\n",(0,s.jsx)(t.h2,{id:"admin-password-recovery",children:"Admin Password Recovery"}),"\n",(0,s.jsx)(t.p,{children:"In the event that the server owner gets locked out of the admin user account due to password loss or other reasons, the GameVault Server provides an easy way to recover access."}),"\n",(0,s.jsxs)(t.p,{children:["First, set the ",(0,s.jsx)(t.code,{children:"SERVER_ADMIN_USERNAME"})," environment variable to the username of the admin user you wish to reset the password for.\nThen, set the ",(0,s.jsx)(t.code,{children:"SERVER_ADMIN_PASSWORD"})," environment variable to the desired password for the admin user."]}),"\n",(0,s.jsx)(t.p,{children:"For example:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-ini",children:"SERVER_ADMIN_USERNAME=gamevaultfan1\nSERVER_ADMIN_PASSWORD=hunter2\n"})}),"\n",(0,s.jsx)(t.p,{children:"Upon the next startup of the GameVault server, the admin user's password will be updated to the specified password, allowing the user to regain access."}),"\n",(0,s.jsx)(t.h2,{id:"user-registration",children:"User Registration"}),"\n",(0,s.jsx)(t.p,{children:"You have the option to enable or disable new user registration. When tighter control is needed, you can opt to disable public registration."}),"\n",(0,s.jsxs)(t.p,{children:["Simply set the ",(0,s.jsx)(t.code,{children:"SERVER_REGISTRATION_DISABLED"})," environment variable to ",(0,s.jsx)(t.code,{children:"true"})," to easily deactivate the public user registration API in GameVault. This prevents new users from creating accounts and accessing the application."]}),"\n",(0,s.jsx)(t.p,{children:"However, even when public registration is closed, authenticated administrators retain the ability to register new users."}),"\n",(0,s.jsx)(t.h2,{id:"user-activation",children:"User Activation"}),"\n",(0,s.jsx)(t.p,{children:"The activation process is a crucial step to authorize and activate new user accounts. By default, newly registered users are required to be activated by an administrator before they can fully utilize the application."}),"\n",(0,s.jsx)(t.p,{children:"Unactivated users have limited rights, even less than the rights of a guest role user. They are treated as unauthenticated and can not access most APIs.\nAdmins are exempt from activation checks. They can activate new users through the admin panel within the GameVault application."}),"\n",(0,s.jsxs)(t.p,{children:["However, if you wish to bypass the mandatory activation step and allow new users to immediately gain full access to GameVault, you can disable the activation process. Simply set the ",(0,s.jsx)(t.code,{children:"SERVER_ACCOUNT_ACTIVATION_DISABLED"})," environment variable to ",(0,s.jsx)(t.code,{children:"true"}),". This activates users automatically upon registration, removes the activation requirement and grants immediate access to new users."]}),"\n",(0,s.jsx)(t.h2,{id:"user-roles",children:"User Roles"}),"\n",(0,s.jsx)(t.p,{children:"Roles play a crucial role in ensuring the security and proper functioning of the GameVault server. They determine the permissions and access levels granted to users within the application."}),"\n",(0,s.jsx)(t.p,{children:"GameVault implements the following roles:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Role"}),(0,s.jsx)(t.th,{children:"Description"}),(0,s.jsx)(t.th,{children:"Level"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Guest"}),(0,s.jsx)(t.td,{children:"This role allows users to view most content within the application."}),(0,s.jsx)(t.td,{children:"1"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Users (Default)"}),(0,s.jsx)(t.td,{children:"This role includes permissions such as downloading games, creating progresses, and editing the user's own profile."}),(0,s.jsx)(t.td,{children:"2"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Editors"}),(0,s.jsx)(t.td,{children:"Editors have the ability to edit and remap games within the application."}),(0,s.jsx)(t.td,{children:"3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Admins"}),(0,s.jsx)(t.td,{children:"Admins possess full control over user management and can edit user profiles."}),(0,s.jsx)(t.td,{children:"4"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"By assigning appropriate roles to users, you can ensure that they have the necessary access and privileges based on their responsibilities."})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var s=n(5271);const i={},r=s.createContext(i);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e6a59d41.e5450944.js b/assets/js/e6a59d41.e5450944.js new file mode 100644 index 000000000..e1dc1b8b2 --- /dev/null +++ b/assets/js/e6a59d41.e5450944.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2246],{8893:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"server-docs/user-management","title":"User Management","description":"This documentation provides instructions on user management for the GameVault server. User management involves configuring the initial admin user, enabling/disabling user registration, managing user activation, and assigning roles. These features are crucial for controlling user access, maintaining security, and administering the server effectively.","source":"@site/docs/server-docs/user-management.md","sourceDirName":"server-docs","slug":"/server-docs/user-management","permalink":"/docs/server-docs/user-management","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/user-management.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":6,"frontMatter":{"sidebar_position":6},"sidebar":"docs","previous":{"title":"Updating Games","permalink":"/docs/server-docs/updating-games"},"next":{"title":"Game Indexing","permalink":"/docs/server-docs/indexing"}}');var i=s(6070),r=s(8591);const a={sidebar_position:6},o="User Management",d={},l=[{value:"Admin User",id:"admin-user",level:2},{value:"Initial Setup",id:"initial-setup",level:3},{value:"Admin Role Recovery",id:"admin-role-recovery",level:2},{value:"Admin Password Recovery",id:"admin-password-recovery",level:2},{value:"User Registration",id:"user-registration",level:2},{value:"User Activation",id:"user-activation",level:2},{value:"User Roles",id:"user-roles",level:2}];function c(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"user-management",children:"User Management"})}),"\n",(0,i.jsx)(t.p,{children:"This documentation provides instructions on user management for the GameVault server. User management involves configuring the initial admin user, enabling/disabling user registration, managing user activation, and assigning roles. These features are crucial for controlling user access, maintaining security, and administering the server effectively."}),"\n",(0,i.jsx)(t.h2,{id:"admin-user",children:"Admin User"}),"\n",(0,i.jsx)(t.h3,{id:"initial-setup",children:"Initial Setup"}),"\n",(0,i.jsx)(t.admonition,{type:"warning",children:(0,i.jsx)(t.p,{children:"GameVault does not register the first admin account for you. You will need to do that yourself."})}),"\n",(0,i.jsx)(t.p,{children:"The first registered user on a server is automatically activated and granted admin permissions. You can register it using the GameVault Client Application."}),"\n",(0,i.jsx)(t.h2,{id:"admin-role-recovery",children:"Admin Role Recovery"}),"\n",(0,i.jsxs)(t.p,{children:["If you lost your admin permissions due to misconfiguration, you can fix this by using the ",(0,i.jsx)(t.code,{children:"SERVER_ADMIN_USERNAME"})," environment variable. Simply set this variable to the username of the user you wish to elevate to admin role. Upon server startup, GameVault will automatically grant admin permissions to the specified username provided in this configuration variable."]}),"\n",(0,i.jsx)(t.h2,{id:"admin-password-recovery",children:"Admin Password Recovery"}),"\n",(0,i.jsx)(t.p,{children:"In the event that the server owner gets locked out of the admin user account due to password loss or other reasons, the GameVault Server provides an easy way to recover access."}),"\n",(0,i.jsxs)(t.p,{children:["First, set the ",(0,i.jsx)(t.code,{children:"SERVER_ADMIN_USERNAME"})," environment variable to the username of the admin user you wish to reset the password for.\nThen, set the ",(0,i.jsx)(t.code,{children:"SERVER_ADMIN_PASSWORD"})," environment variable to the desired password for the admin user."]}),"\n",(0,i.jsx)(t.p,{children:"For example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ini",children:"SERVER_ADMIN_USERNAME=gamevaultfan1\nSERVER_ADMIN_PASSWORD=hunter2\n"})}),"\n",(0,i.jsx)(t.p,{children:"Upon the next startup of the GameVault server, the admin user's password will be updated to the specified password, allowing the user to regain access."}),"\n",(0,i.jsx)(t.h2,{id:"user-registration",children:"User Registration"}),"\n",(0,i.jsx)(t.p,{children:"You have the option to enable or disable new user registration. When tighter control is needed, you can opt to disable public registration."}),"\n",(0,i.jsxs)(t.p,{children:["Simply set the ",(0,i.jsx)(t.code,{children:"SERVER_REGISTRATION_DISABLED"})," environment variable to ",(0,i.jsx)(t.code,{children:"true"})," to easily deactivate the public user registration API in GameVault. This prevents new users from creating accounts and accessing the application."]}),"\n",(0,i.jsx)(t.p,{children:"However, even when public registration is closed, authenticated administrators retain the ability to register new users."}),"\n",(0,i.jsx)(t.h2,{id:"user-activation",children:"User Activation"}),"\n",(0,i.jsx)(t.p,{children:"The activation process is a crucial step to authorize and activate new user accounts. By default, newly registered users are required to be activated by an administrator before they can fully utilize the application."}),"\n",(0,i.jsx)(t.p,{children:"Unactivated users have limited rights, even less than the rights of a guest role user. They are treated as unauthenticated and can not access most APIs.\nAdmins are exempt from activation checks. They can activate new users through the admin panel within the GameVault application."}),"\n",(0,i.jsxs)(t.p,{children:["However, if you wish to bypass the mandatory activation step and allow new users to immediately gain full access to GameVault, you can disable the activation process. Simply set the ",(0,i.jsx)(t.code,{children:"SERVER_ACCOUNT_ACTIVATION_DISABLED"})," environment variable to ",(0,i.jsx)(t.code,{children:"true"}),". This activates users automatically upon registration, removes the activation requirement and grants immediate access to new users."]}),"\n",(0,i.jsx)(t.h2,{id:"user-roles",children:"User Roles"}),"\n",(0,i.jsx)(t.p,{children:"Roles play a crucial role in ensuring the security and proper functioning of the GameVault server. They determine the permissions and access levels granted to users within the application."}),"\n",(0,i.jsx)(t.p,{children:"GameVault implements the following roles:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Role"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Level"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Guest"}),(0,i.jsx)(t.td,{children:"This role allows users to view most content within the application."}),(0,i.jsx)(t.td,{children:"1"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Users (Default)"}),(0,i.jsx)(t.td,{children:"This role includes permissions such as downloading games, creating progresses, and editing the user's own profile."}),(0,i.jsx)(t.td,{children:"2"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Editors"}),(0,i.jsx)(t.td,{children:"Editors have the ability to edit and remap games within the application."}),(0,i.jsx)(t.td,{children:"3"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Admins"}),(0,i.jsx)(t.td,{children:"Admins possess full control over user management and can edit user profiles."}),(0,i.jsx)(t.td,{children:"4"})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"By assigning appropriate roles to users, you can ensure that they have the necessary access and privileges based on their responsibilities."})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>o});var n=s(758);const i={},r=n.createContext(i);function a(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e70842e4.d1216a72.js b/assets/js/e70842e4.d1216a72.js new file mode 100644 index 000000000..5c19898e0 --- /dev/null +++ b/assets/js/e70842e4.d1216a72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9830],{5668:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>n,toc:()=>u});var n=a(4852),l=a(6070),i=a(8591);const r={title:"GameVault+ out now",authors:["alfagun74"],tags:["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},o=void 0,s={authorsImageUrls:[void 0]},u=[];function m(e){const t={p:"p",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.p,{children:"Hey everyone!"}),"\n",(0,l.jsx)(t.p,{children:"We're thrilled to announce that the early access phase of GameVault+ has concluded, and we're officially launching it today! It's been an incredible journey from the inception of GameVault to where we are now, and we couldn't have done it without your amazing support."})]})}function p(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(m,{...e})}):m(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>r,x:()=>o});var n=a(758);const l={},i=n.createContext(l);function r(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(i.Provider,{value:t},e.children)}},4852:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/04/14/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-14.md","source":"@site/blog/2024-04-14.md","title":"GameVault+ out now","description":"Hey everyone!","date":"2024-04-14T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"DRM-free","permalink":"/blog/tags/drm-free"},{"inline":true,"label":"video games","permalink":"/blog/tags/video-games"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription","permalink":"/blog/tags/subscription"},{"inline":true,"label":"community-driven","permalink":"/blog/tags/community-driven"},{"inline":true,"label":"updates","permalink":"/blog/tags/updates"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"early access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"release","permalink":"/blog/tags/release"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"sustainability","permalink":"/blog/tags/sustainability"},{"inline":true,"label":"partnerships","permalink":"/blog/tags/partnerships"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"development","permalink":"/blog/tags/development"}],"readingTime":1.18,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault+ out now","authors":["alfagun74"],"tags":["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},"unlisted":false,"prevItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"},"nextItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"}}')}}]); \ No newline at end of file diff --git a/assets/js/e70842e4.f0b00acd.js b/assets/js/e70842e4.f0b00acd.js deleted file mode 100644 index 57bc26a2a..000000000 --- a/assets/js/e70842e4.f0b00acd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5912],{4712:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>r,contentTitle:()=>o,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var t=n(2676),l=n(8358);const i={title:"GameVault+ out now",authors:["alfagun74"],tags:["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},o=void 0,s={permalink:"/blog/2024/04/14/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-14.md",source:"@site/blog/2024-04-14.md",title:"GameVault+ out now",description:"Hey everyone!",date:"2024-04-14T00:00:00.000Z",tags:[{inline:!0,label:"gaming",permalink:"/blog/tags/gaming"},{inline:!0,label:"self-hosted",permalink:"/blog/tags/self-hosted"},{inline:!0,label:"platform",permalink:"/blog/tags/platform"},{inline:!0,label:"DRM-free",permalink:"/blog/tags/drm-free"},{inline:!0,label:"video games",permalink:"/blog/tags/video-games"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"GameVault+",permalink:"/blog/tags/game-vault"},{inline:!0,label:"subscription",permalink:"/blog/tags/subscription"},{inline:!0,label:"community-driven",permalink:"/blog/tags/community-driven"},{inline:!0,label:"updates",permalink:"/blog/tags/updates"},{inline:!0,label:"announcement",permalink:"/blog/tags/announcement"},{inline:!0,label:"early access",permalink:"/blog/tags/early-access"},{inline:!0,label:"release",permalink:"/blog/tags/release"},{inline:!0,label:"features",permalink:"/blog/tags/features"},{inline:!0,label:"sustainability",permalink:"/blog/tags/sustainability"},{inline:!0,label:"partnerships",permalink:"/blog/tags/partnerships"},{inline:!0,label:"Discord",permalink:"/blog/tags/discord"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"improvement",permalink:"/blog/tags/improvement"},{inline:!0,label:"development",permalink:"/blog/tags/development"}],readingTime:1.18,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"GameVault+ out now",authors:["alfagun74"],tags:["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},unlisted:!1,prevItem:{title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",permalink:"/blog/2024/05/07/"},nextItem:{title:"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!",permalink:"/blog/2024/04/01/2024-04-01/"}},r={authorsImageUrls:[void 0]},m=[];function u(e){const a={p:"p",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:"Hey everyone!"}),"\n",(0,t.jsx)(a.p,{children:"We're thrilled to announce that the early access phase of GameVault+ has concluded, and we're officially launching it today! It's been an incredible journey from the inception of GameVault to where we are now, and we couldn't have done it without your amazing support."})]})}function g(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8358:(e,a,n)=>{n.d(a,{Z:()=>s,a:()=>o});var t=n(5271);const l={},i=t.createContext(l);function o(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function s(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),t.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e78c2f6e.826f4032.js b/assets/js/e78c2f6e.cc516231.js similarity index 84% rename from assets/js/e78c2f6e.826f4032.js rename to assets/js/e78c2f6e.cc516231.js index 23fb6332e..6d052eb38 100644 --- a/assets/js/e78c2f6e.826f4032.js +++ b/assets/js/e78c2f6e.cc516231.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1545],{2415:e=>{e.exports=JSON.parse('{"tag":{"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/creepy-behavior","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8104],{1853:e=>{e.exports=JSON.parse('{"tag":{"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/creepy-behavior","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e7aa45d5.8a002343.js b/assets/js/e7aa45d5.8a002343.js new file mode 100644 index 000000000..3e9cbea75 --- /dev/null +++ b/assets/js/e7aa45d5.8a002343.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1837],{9294:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>n,toc:()=>u});var n=a(4871),o=a(6070),i=a(8591);const l={title:"Please help us prioritize!",authors:["alfagun74"],tags:["community","GameVault","development","roadmap","collaboration","feedback","GitHub","voting","features","platform","Kanban Board","Discord","Council Member","polls","gaming experience"]},r=void 0,s={authorsImageUrls:[void 0]},u=[];function m(e){const t={a:"a",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"Hello everyone!"}),"\n",(0,o.jsx)(t.p,{children:"We hope you're all doing well. We wanted to take a moment to express our heartfelt gratitude for the flood of feature requests and bug reports that have been pouring into our issue trackers. Your enthusiasm and dedication to making GameVault even better are truly inspiring to us."}),"\n",(0,o.jsx)(t.p,{children:"As many of you may already know, GameVault is a passion project for us, and while we are mostly convinced by your fantastic ideas, it may take some time for us to implement them. Our team meetings happen in our free time, and although we genuinely want to incorporate your suggestions into our roadmap, we are limited by the time and capacity we can dedicate to the project. Moreover, we want to ensure that the features we develop are refined, polished, and also the most desired in the users' opinions, which adds to the timeline."}),"\n",(0,o.jsxs)(t.p,{children:["We believe that collaboration with our incredible community is the key to success, and that's why we want to introduce you to our Roadmap. It displays all new issues, planned tasks we want to work on, and all the ongoing work in a well-organized Kanban Board. ",(0,o.jsx)(t.a,{href:"https://github.com/orgs/Phalcode/projects/4",children:"You can find it right here."})]}),"\n",(0,o.jsx)(t.p,{children:"To ensure that GameVault's development aligns better with your needs, we kindly request your active participation. By voting on GitHub with a Thumbs Up or a Thumbs Down on new and planned issues, you can help us prioritize them effectively. We value your opinion: What features do you feel are most crucial? What aspects of the platform do you find most bothersome? What issues do you see as unnecessary or bloated? Your input will mainly shape the direction we take."}),"\n",(0,o.jsxs)(t.p,{children:["If you're eager to go the extra mile and actively contribute to shaping GameVault further, we invite you to ",(0,o.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"join our Discord community"}),' and becoming a "Council Member". By becoming a "Council Member" and enabling Poll Notifications under "#Channels & Roles", you will have a direct say in the future of GameVault because you will get notifications about opinion polls we run from time to time.']}),"\n",(0,o.jsx)(t.p,{children:"We cannot stress enough how much we appreciate your involvement in our endeavor to create the ultimate gaming experience for all of you. Your passion and feedback are invaluable, and we are committed to making GameVault the best it can be, together."}),"\n",(0,o.jsx)(t.p,{children:"Thank you for being part of this amazing journey with us!"})]})}function c(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>l,x:()=>r});var n=a(758);const o={},i=n.createContext(o);function l(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(i.Provider,{value:t},e.children)}},4871:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/29/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-29.md","source":"@site/blog/2023-07-29.md","title":"Please help us prioritize!","description":"Hello everyone!","date":"2023-07-29T00:00:00.000Z","tags":[{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"roadmap","permalink":"/blog/tags/roadmap"},{"inline":true,"label":"collaboration","permalink":"/blog/tags/collaboration"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"GitHub","permalink":"/blog/tags/git-hub"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"Kanban Board","permalink":"/blog/tags/kanban-board"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"Council Member","permalink":"/blog/tags/council-member"},{"inline":true,"label":"polls","permalink":"/blog/tags/polls"},{"inline":true,"label":"gaming experience","permalink":"/blog/tags/gaming-experience"}],"readingTime":1.995,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Please help us prioritize!","authors":["alfagun74"],"tags":["community","GameVault","development","roadmap","collaboration","feedback","GitHub","voting","features","platform","Kanban Board","Discord","Council Member","polls","gaming experience"]},"unlisted":false,"prevItem":{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/"},"nextItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"}}')}}]); \ No newline at end of file diff --git a/assets/js/e7aa45d5.9843d9eb.js b/assets/js/e7aa45d5.9843d9eb.js deleted file mode 100644 index 44043053b..000000000 --- a/assets/js/e7aa45d5.9843d9eb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9886],{3581:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var n=t(2676),o=t(8358);const i={title:"Please help us prioritize!",authors:["alfagun74"],tags:["community","GameVault","development","roadmap","collaboration","feedback","GitHub","voting","features","platform","Kanban Board","Discord","Council Member","polls","gaming experience"]},l=void 0,r={permalink:"/blog/2023/07/29/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-29.md",source:"@site/blog/2023-07-29.md",title:"Please help us prioritize!",description:"Hello everyone!",date:"2023-07-29T00:00:00.000Z",tags:[{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"development",permalink:"/blog/tags/development"},{inline:!0,label:"roadmap",permalink:"/blog/tags/roadmap"},{inline:!0,label:"collaboration",permalink:"/blog/tags/collaboration"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"GitHub",permalink:"/blog/tags/git-hub"},{inline:!0,label:"voting",permalink:"/blog/tags/voting"},{inline:!0,label:"features",permalink:"/blog/tags/features"},{inline:!0,label:"platform",permalink:"/blog/tags/platform"},{inline:!0,label:"Kanban Board",permalink:"/blog/tags/kanban-board"},{inline:!0,label:"Discord",permalink:"/blog/tags/discord"},{inline:!0,label:"Council Member",permalink:"/blog/tags/council-member"},{inline:!0,label:"polls",permalink:"/blog/tags/polls"},{inline:!0,label:"gaming experience",permalink:"/blog/tags/gaming-experience"}],readingTime:1.995,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Please help us prioritize!",authors:["alfagun74"],tags:["community","GameVault","development","roadmap","collaboration","feedback","GitHub","voting","features","platform","Kanban Board","Discord","Council Member","polls","gaming experience"]},unlisted:!1,prevItem:{title:"A Look Back and a Glimpse Forward",permalink:"/blog/2023/11/20/"},nextItem:{title:"Celebrating 600+ Installations and announcing the upcoming big feature",permalink:"/blog/2023/07/24/"}},s={authorsImageUrls:[void 0]},u=[];function m(e){const a={a:"a",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hello everyone!"}),"\n",(0,n.jsx)(a.p,{children:"We hope you're all doing well. We wanted to take a moment to express our heartfelt gratitude for the flood of feature requests and bug reports that have been pouring into our issue trackers. Your enthusiasm and dedication to making GameVault even better are truly inspiring to us."}),"\n",(0,n.jsx)(a.p,{children:"As many of you may already know, GameVault is a passion project for us, and while we are mostly convinced by your fantastic ideas, it may take some time for us to implement them. Our team meetings happen in our free time, and although we genuinely want to incorporate your suggestions into our roadmap, we are limited by the time and capacity we can dedicate to the project. Moreover, we want to ensure that the features we develop are refined, polished, and also the most desired in the users' opinions, which adds to the timeline."}),"\n",(0,n.jsxs)(a.p,{children:["We believe that collaboration with our incredible community is the key to success, and that's why we want to introduce you to our Roadmap. It displays all new issues, planned tasks we want to work on, and all the ongoing work in a well-organized Kanban Board. ",(0,n.jsx)(a.a,{href:"https://github.com/orgs/Phalcode/projects/4",children:"You can find it right here."})]}),"\n",(0,n.jsx)(a.p,{children:"To ensure that GameVault's development aligns better with your needs, we kindly request your active participation. By voting on GitHub with a Thumbs Up or a Thumbs Down on new and planned issues, you can help us prioritize them effectively. We value your opinion: What features do you feel are most crucial? What aspects of the platform do you find most bothersome? What issues do you see as unnecessary or bloated? Your input will mainly shape the direction we take."}),"\n",(0,n.jsxs)(a.p,{children:["If you're eager to go the extra mile and actively contribute to shaping GameVault further, we invite you to ",(0,n.jsx)(a.a,{href:"https://discord.gg/NEdNen2dSu",children:"join our Discord community"}),' and becoming a "Council Member". By becoming a "Council Member" and enabling Poll Notifications under "#Channels & Roles", you will have a direct say in the future of GameVault because you will get notifications about opinion polls we run from time to time.']}),"\n",(0,n.jsx)(a.p,{children:"We cannot stress enough how much we appreciate your involvement in our endeavor to create the ultimate gaming experience for all of you. Your passion and feedback are invaluable, and we are committed to making GameVault the best it can be, together."}),"\n",(0,n.jsx)(a.p,{children:"Thank you for being part of this amazing journey with us!"})]})}function c(e={}){const{wrapper:a}={...(0,o.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>r,a:()=>l});var n=t(5271);const o={},i=n.createContext(o);function l(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e935068c.80350e6e.js b/assets/js/e935068c.50671768.js similarity index 84% rename from assets/js/e935068c.80350e6e.js rename to assets/js/e935068c.50671768.js index ebfa6b654..3490f39f0 100644 --- a/assets/js/e935068c.80350e6e.js +++ b/assets/js/e935068c.50671768.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8307],{3419:e=>{e.exports=JSON.parse('{"tag":{"label":"Discord server","permalink":"/blog/tags/discord-server","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/discord-server","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5872],{2953:e=>{e.exports=JSON.parse('{"tag":{"label":"Discord server","permalink":"/blog/tags/discord-server","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/discord-server","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e98ed1e4.63e2958e.js b/assets/js/e98ed1e4.be4c2b71.js similarity index 85% rename from assets/js/e98ed1e4.63e2958e.js rename to assets/js/e98ed1e4.be4c2b71.js index e54bbbfeb..ae806e542 100644 --- a/assets/js/e98ed1e4.63e2958e.js +++ b/assets/js/e98ed1e4.be4c2b71.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3017],{7459:a=>{a.exports=JSON.parse('{"tag":{"label":"name migration progress","permalink":"/blog/tags/name-migration-progress","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/name-migration-progress","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8966],{1534:a=>{a.exports=JSON.parse('{"tag":{"label":"name migration progress","permalink":"/blog/tags/name-migration-progress","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/name-migration-progress","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e9e0f988.10805eba.js b/assets/js/e9e0f988.10805eba.js deleted file mode 100644 index bd9651091..000000000 --- a/assets/js/e9e0f988.10805eba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[310],{2607:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var o=n(2676),s=n(8358);const i={sidebar_position:3},a="Updating the Client",r={id:"client-docs/updating-client",title:"Updating the Client",description:"The process for updating the app depends on the installation source.",source:"@site/docs/client-docs/updating-client.md",sourceDirName:"client-docs",slug:"/client-docs/updating-client",permalink:"/docs/client-docs/updating-client",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/updating-client.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"docs",previous:{title:"How to Use",permalink:"/docs/client-docs/how-to-use"},next:{title:"Data Management",permalink:"/docs/client-docs/data"}},c={},d=[{value:"Microsoft Store",id:"microsoft-store",level:2},{value:"Other Sources",id:"other-sources",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"updating-the-client",children:"Updating the Client"})}),"\n",(0,o.jsx)(t.p,{children:"The process for updating the app depends on the installation source."}),"\n",(0,o.jsx)(t.h2,{id:"microsoft-store",children:"Microsoft Store"}),"\n",(0,o.jsx)(t.p,{children:"If you obtained the app from the Microsoft Store, we're pleased to inform you that our Client app features an automatic update functionality through the Microsoft Store. When you launch the app and observe the spinning logo, it automatically checks for available updates. If a new version is detected, the app prompts you to install it. After the update is installed, the application will close, and you'll need to manually restart it. Once restarted, you'll be using the most recent version."}),"\n",(0,o.jsx)(t.h2,{id:"other-sources",children:"Other Sources"}),"\n",(0,o.jsx)(t.p,{children:"If you acquired the app from a different source, such as by self-compiling, extracting it from the .appxbundle, or downloading the binaries from GitHub, it becomes your responsibility to stay updated with the latest releases and perform the installations."}),"\n",(0,o.jsxs)(t.p,{children:["Be sure to ",(0,o.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"join our Discord community"})," and watch our Github Projects to stay informed about the latest advancements."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var o=n(5271);const s={},i=o.createContext(s);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e9e0f988.b6a8b434.js b/assets/js/e9e0f988.b6a8b434.js new file mode 100644 index 000000000..d2457e62d --- /dev/null +++ b/assets/js/e9e0f988.b6a8b434.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6929],{4462:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"client-docs/updating-client","title":"Updating the Client","description":"The process for updating the app depends on the installation source.","source":"@site/docs/client-docs/updating-client.md","sourceDirName":"client-docs","slug":"/client-docs/updating-client","permalink":"/docs/client-docs/updating-client","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/updating-client.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"docs","previous":{"title":"How to Use","permalink":"/docs/client-docs/how-to-use"},"next":{"title":"Data Management","permalink":"/docs/client-docs/data"}}');var s=n(6070),i=n(8591);const a={sidebar_position:3},r="Updating the Client",c={},d=[{value:"Microsoft Store",id:"microsoft-store",level:2},{value:"Other Sources",id:"other-sources",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"updating-the-client",children:"Updating the Client"})}),"\n",(0,s.jsx)(t.p,{children:"The process for updating the app depends on the installation source."}),"\n",(0,s.jsx)(t.h2,{id:"microsoft-store",children:"Microsoft Store"}),"\n",(0,s.jsx)(t.p,{children:"If you obtained the app from the Microsoft Store, we're pleased to inform you that our Client app features an automatic update functionality through the Microsoft Store. When you launch the app and observe the spinning logo, it automatically checks for available updates. If a new version is detected, the app prompts you to install it. After the update is installed, the application will close, and you'll need to manually restart it. Once restarted, you'll be using the most recent version."}),"\n",(0,s.jsx)(t.h2,{id:"other-sources",children:"Other Sources"}),"\n",(0,s.jsx)(t.p,{children:"If you acquired the app from a different source, such as by self-compiling, extracting it from the .appxbundle, or downloading the binaries from GitHub, it becomes your responsibility to stay updated with the latest releases and perform the installations."}),"\n",(0,s.jsxs)(t.p,{children:["Be sure to ",(0,s.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"join our Discord community"})," and watch our Github Projects to stay informed about the latest advancements."]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>r});var o=n(758);const s={},i=o.createContext(s);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e9e1de17.538584e4.js b/assets/js/e9e1de17.538584e4.js new file mode 100644 index 000000000..57c50d1d2 --- /dev/null +++ b/assets/js/e9e1de17.538584e4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7722],{5062:e=>{e.exports=JSON.parse('{"tag":{"label":"software development","permalink":"/blog/tags/software-development","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software-development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e9e1de17.929612ec.js b/assets/js/e9e1de17.929612ec.js deleted file mode 100644 index 5e4be79b3..000000000 --- a/assets/js/e9e1de17.929612ec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9473],{233:e=>{e.exports=JSON.parse('{"tag":{"label":"software development","permalink":"/blog/tags/software-development","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/software-development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/ec46a009.1391d8ed.js b/assets/js/ec46a009.1391d8ed.js new file mode 100644 index 000000000..7002a1301 --- /dev/null +++ b/assets/js/ec46a009.1391d8ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8983],{490:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"gamevault-plus/introduction","title":"Introduction","description":"Upgrade your gaming experience with GameVault+, an affordable premium add-on that brings exclusive nice-to-have features to enhance your GameVault application. Support our development team while enjoying the premium features.","source":"@site/docs/gamevault-plus/introduction.md","sourceDirName":"gamevault-plus","slug":"/gamevault-plus/introduction","permalink":"/docs/gamevault-plus/introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/introduction.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":1,"frontMatter":{"title":"Introduction","hide_title":true,"sidebar_position":1,"description":"Upgrade your gaming experience with GameVault+, an affordable premium add-on that brings exclusive nice-to-have features to enhance your GameVault application. Support our development team while enjoying the premium features."},"sidebar":"docs","previous":{"title":"Running the Client on Steamdeck","permalink":"/docs/advanced-usage/steamdeck"},"next":{"title":"Client Setup","permalink":"/docs/gamevault-plus/client-setup"}}');var i=a(6070),r=a(8591);const o={title:"Introduction",hide_title:!0,sidebar_position:1,description:"Upgrade your gaming experience with GameVault+, an affordable premium add-on that brings exclusive nice-to-have features to enhance your GameVault application. Support our development team while enjoying the premium features."},s=void 0,l={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Feature List",id:"feature-list",level:2},{value:"Pricing",id:"pricing",level:2},{value:"Get Started",id:"get-started",level:2},{value:"Questions and Answers",id:"questions-and-answers",level:2},{value:"What is Phalcode?",id:"what-is-phalcode",level:3},{value:"I have trouble with GameVault+ and I need support. How can I contact you?",id:"i-have-trouble-with-gamevault-and-i-need-support-how-can-i-contact-you",level:3},{value:"How do I manage billing and payments?",id:"how-do-i-manage-billing-and-payments",level:3},{value:"What payment methods are accepted for GameVault+ subscriptions?",id:"what-payment-methods-are-accepted-for-gamevault-subscriptions",level:3},{value:"Are there going to be more features added to GameVault+?",id:"are-there-going-to-be-more-features-added-to-gamevault",level:3},{value:"Can GameVault+ be shared with multiple users?",id:"can-gamevault-be-shared-with-multiple-users",level:3},{value:"How many devices can I have in my GameVault+ subscription?",id:"how-many-devices-can-i-have-in-my-gamevault-subscription",level:3},{value:"Can GameVault+ be used offline?",id:"can-gamevault-be-used-offline",level:3},{value:"How does GameVault+ ensure user privacy protection?",id:"how-does-gamevault-ensure-user-privacy-protection",level:3},{value:"Will GameVault+ support more integrations with other software in the future?",id:"will-gamevault-support-more-integrations-with-other-software-in-the-future",level:3},{value:"Can users suggest or vote on new features for GameVault+?",id:"can-users-suggest-or-vote-on-new-features-for-gamevault",level:3},{value:"Which Client Application versions are supported?",id:"which-client-application-versions-are-supported",level:3},{value:"Are commercial licenses available for GameVault+?",id:"are-commercial-licenses-available-for-gamevault",level:3},{value:"What if i cant afford GameVault+?",id:"what-if-i-cant-afford-gamevault",level:3}];function c(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",br:"br",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("div",{class:"banner",children:[(0,i.jsx)("img",{src:"/img/gamevault-plus.png",alt:"GameVault+ Banner"}),(0,i.jsx)("strong",{children:"GameVault+"})]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsx)(t.p,{children:"Elevate Your GameVault Experience with Premium Features"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsxs)(t.p,{children:["Welcome to ",(0,i.jsx)(t.strong,{children:"GameVault+"}),", the premium upgrade subscription designed for enthusiasts seeking an enhanced GameVault experience. Here we are gradually adding a variety of exquisite nice to have features to enrich your time with GameVault while supporting us as developers and keeping this project alive. The subscription is priced affordably and is entirely optional, ensuring that our core product remains freely accessible to all."]}),"\n",(0,i.jsx)(t.h2,{id:"feature-list",children:"Feature List"}),"\n",(0,i.jsx)(t.p,{children:"As of now, we are offering the following features:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"\ud83d\udcf8 Uploading animated profile pictures"}),"\n",(0,i.jsx)(t.li,{children:"\ud83c\udfa8 Custom Themes"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udcbb GameVault Client API (Interfaces for integrations like Playnite)"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"pricing",children:"Pricing"}),"\n",(0,i.jsxs)(t.p,{children:["The GameVault+ subscription is priced affordably at only ",(0,i.jsx)(t.strong,{children:"\u20ac 4.99/month"})," or ",(0,i.jsx)(t.strong,{children:"\u20ac 49.90/year"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"get-started",children:"Get Started"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"https://phalco.de/account/login",children:"Sign up or sign in"})," to your personal Phalcode account"]}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://phalco.de/products/gamevault-plus/checkout",children:"Subscribe to a GameVault+ Plan"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/docs/gamevault-plus/client-setup",children:"Set up your GameVault Client Application"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.strong,{children:"Enjoy premium features while supporting us \ud83e\udd73\ud83d\udc83"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"questions-and-answers",children:"Questions and Answers"}),"\n",(0,i.jsx)(t.h3,{id:"what-is-phalcode",children:"What is Phalcode?"}),"\n",(0,i.jsxs)(t.p,{children:["Phalcode is the small startup company developing GameVault. We are just two friends developing software and based in germany. You can find more information about us on our ",(0,i.jsx)(t.a,{href:"https://phalco.de",children:"website"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"i-have-trouble-with-gamevault-and-i-need-support-how-can-i-contact-you",children:"I have trouble with GameVault+ and I need support. How can I contact you?"}),"\n",(0,i.jsxs)(t.p,{children:["Contact the developers ",(0,i.jsx)(t.strong,{children:"directly"})," on ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," or via our ",(0,i.jsx)(t.a,{href:"mailto:contact@phalco.de",children:"email"}),". Do ",(0,i.jsx)(t.strong,{children:"not"})," use the public discord channels for support regarding your personal GameVault+ subscription."]}),"\n",(0,i.jsx)(t.h3,{id:"how-do-i-manage-billing-and-payments",children:"How do I manage billing and payments?"}),"\n",(0,i.jsxs)(t.p,{children:["GameVault+ uses the Stripe billing system for your convenience. Easily handle your subscription, review billing details, and make changes through ",(0,i.jsx)(t.a,{href:"https://billing.stripe.com/p/login/7sI9B10uP6kj36M000",children:"our Stripe Customer Portal"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"what-payment-methods-are-accepted-for-gamevault-subscriptions",children:"What payment methods are accepted for GameVault+ subscriptions?"}),"\n",(0,i.jsx)(t.p,{children:"We offer several easy ways to pay for your GameVault+ subscription. You can use credit or debit cards, popular digital wallets, various bank redirects or even SEPA direct debit transfers. We want to make it convenient for you to choose how you pay."}),"\n",(0,i.jsx)(t.admonition,{title:"Important: Potential Delays",type:"note",children:(0,i.jsx)(t.p,{children:"Please be aware that if you use Bancontact, iDEAL, SOFORT or SEPA Direct Debit as your payment method, there might be delays in confirming your payment. To get your GameVault+ subscription quickly, we recommend using a payment method that confirms faster."})}),"\n",(0,i.jsx)(t.h3,{id:"are-there-going-to-be-more-features-added-to-gamevault",children:"Are there going to be more features added to GameVault+?"}),"\n",(0,i.jsx)(t.p,{children:"Of course!, You are the people keeping our project alive after all."}),"\n",(0,i.jsx)(t.p,{children:"Expect updates with awesome new GameVault+ content and improvements down thre road. We are committed to enhancing the GameVault+ experience."}),"\n",(0,i.jsx)(t.h3,{id:"can-gamevault-be-shared-with-multiple-users",children:"Can GameVault+ be shared with multiple users?"}),"\n",(0,i.jsx)(t.p,{children:"No, your GameVault+ subscription is designed for personal use only. Please avoid sharing it with anyone else."}),"\n",(0,i.jsx)(t.p,{children:"You can enjoy the benefits of GameVault+ on any GameVault Server you connect to. However, keep in mind that server administrators may choose to disable certain features offered by GameVault+ in their configurations."}),"\n",(0,i.jsx)(t.h3,{id:"how-many-devices-can-i-have-in-my-gamevault-subscription",children:"How many devices can I have in my GameVault+ subscription?"}),"\n",(0,i.jsx)(t.p,{children:"Your subscription isn't restricted to a specific number of active devices at the moment."}),"\n",(0,i.jsx)(t.h3,{id:"can-gamevault-be-used-offline",children:"Can GameVault+ be used offline?"}),"\n",(0,i.jsx)(t.p,{children:"Initially, you'll need an internet connection to download and set up your GameVault+ license."}),"\n",(0,i.jsx)(t.p,{children:"Once that setup is complete, GameVault+ can be accessed offline throughout your current subscription period. For those who prefer offline access, we suggest opting for an annual subscription, as it technically only requires an internet connection once a year."}),"\n",(0,i.jsx)(t.h3,{id:"how-does-gamevault-ensure-user-privacy-protection",children:"How does GameVault+ ensure user privacy protection?"}),"\n",(0,i.jsx)(t.p,{children:"At Phalcode, keeping user privacy safe is our very top priority. We use strong security measures, including encryption, to protect user data. We also follow GDPR rules to make sure we're following privacy laws."}),"\n",(0,i.jsxs)(t.p,{children:["Additionally, all billing and payment info is stored securely on the servers of our billing partner, Stripe, which meets PCI compliance standards. For more details on Stripe's security, you can check it out ",(0,i.jsx)(t.a,{href:"https://docs.stripe.com/security",children:"here"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["You can find all details in our ",(0,i.jsx)(t.a,{href:"https://phalco.de/privacy",children:"privacy policy"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"will-gamevault-support-more-integrations-with-other-software-in-the-future",children:"Will GameVault+ support more integrations with other software in the future?"}),"\n",(0,i.jsx)(t.p,{children:"We hope so. We're actively exploring partnerships and integrations with other gaming platforms and tools to provide a more interconnected gaming experience."}),"\n",(0,i.jsx)(t.h3,{id:"can-users-suggest-or-vote-on-new-features-for-gamevault",children:"Can users suggest or vote on new features for GameVault+?"}),"\n",(0,i.jsxs)(t.p,{children:["Certainly! We encourage user feedback and suggestions. While we may not implement every idea, we value community input in shaping the future of GameVault+. Share your ideas through our feedback channels, primarily on ",(0,i.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues",children:"Github"})," and ",(0,i.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"which-client-application-versions-are-supported",children:"Which Client Application versions are supported?"}),"\n",(0,i.jsx)(t.p,{children:"GameVault+ features are available from the official GameVault Client application version 1.9.0.0 and above. It does not matter if you got it from the Microsoft Store or used an alternative installation option."}),"\n",(0,i.jsx)(t.h3,{id:"are-commercial-licenses-available-for-gamevault",children:"Are commercial licenses available for GameVault+?"}),"\n",(0,i.jsxs)(t.p,{children:["There are, but for commercial use, please ",(0,i.jsx)(t.a,{href:"mailto:contact@phalco.de",children:"contact us directly"})," to discuss an individual licensing agreement.",(0,i.jsx)(t.br,{}),"\n","Personal subscriptions are tailored for individual users, but we're happy to collaborate with businesses for customized solutions and volume licenses."]}),"\n",(0,i.jsx)(t.h3,{id:"what-if-i-cant-afford-gamevault",children:"What if i cant afford GameVault+?"}),"\n",(0,i.jsxs)(t.p,{children:["We totally understand that not everyone can afford GameVault+, and that's fine. From our perspective, you're free to ",(0,i.jsx)(t.em,{children:"tinker"})," your way around the paywall for your personal use. The source code is on ",(0,i.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app",children:"Github"}),". But ",(0,i.jsx)(t.strong,{children:"please"})," avoid pirated versions, as they may contain malware, and also ",(0,i.jsx)(t.strong,{children:"please"})," refrain from sharing your bypass-modifications."]})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>s});var n=a(758);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec46a009.b72b84ee.js b/assets/js/ec46a009.b72b84ee.js deleted file mode 100644 index 204094846..000000000 --- a/assets/js/ec46a009.b72b84ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9362],{2983:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=a(2676),i=a(8358);const r={title:"Introduction",hide_title:!0,sidebar_position:1,description:"Upgrade your gaming experience with GameVault+, an affordable premium add-on that brings exclusive nice-to-have features to enhance your GameVault application. Support our development team while enjoying the premium features."},o=void 0,s={id:"gamevault-plus/introduction",title:"Introduction",description:"Upgrade your gaming experience with GameVault+, an affordable premium add-on that brings exclusive nice-to-have features to enhance your GameVault application. Support our development team while enjoying the premium features.",source:"@site/docs/gamevault-plus/introduction.md",sourceDirName:"gamevault-plus",slug:"/gamevault-plus/introduction",permalink:"/docs/gamevault-plus/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/introduction.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:1,frontMatter:{title:"Introduction",hide_title:!0,sidebar_position:1,description:"Upgrade your gaming experience with GameVault+, an affordable premium add-on that brings exclusive nice-to-have features to enhance your GameVault application. Support our development team while enjoying the premium features."},sidebar:"docs",previous:{title:"Running the Client on Steamdeck",permalink:"/docs/advanced-usage/steamdeck"},next:{title:"Client Setup",permalink:"/docs/gamevault-plus/client-setup"}},l={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Feature List",id:"feature-list",level:2},{value:"Pricing",id:"pricing",level:2},{value:"Get Started",id:"get-started",level:2},{value:"Questions and Answers",id:"questions-and-answers",level:2},{value:"What is Phalcode?",id:"what-is-phalcode",level:3},{value:"I have trouble with GameVault+ and I need support. How can I contact you?",id:"i-have-trouble-with-gamevault-and-i-need-support-how-can-i-contact-you",level:3},{value:"How do I manage billing and payments?",id:"how-do-i-manage-billing-and-payments",level:3},{value:"What payment methods are accepted for GameVault+ subscriptions?",id:"what-payment-methods-are-accepted-for-gamevault-subscriptions",level:3},{value:"Are there going to be more features added to GameVault+?",id:"are-there-going-to-be-more-features-added-to-gamevault",level:3},{value:"Can GameVault+ be shared with multiple users?",id:"can-gamevault-be-shared-with-multiple-users",level:3},{value:"How many devices can I have in my GameVault+ subscription?",id:"how-many-devices-can-i-have-in-my-gamevault-subscription",level:3},{value:"Can GameVault+ be used offline?",id:"can-gamevault-be-used-offline",level:3},{value:"How does GameVault+ ensure user privacy protection?",id:"how-does-gamevault-ensure-user-privacy-protection",level:3},{value:"Will GameVault+ support more integrations with other software in the future?",id:"will-gamevault-support-more-integrations-with-other-software-in-the-future",level:3},{value:"Can users suggest or vote on new features for GameVault+?",id:"can-users-suggest-or-vote-on-new-features-for-gamevault",level:3},{value:"Which Client Application versions are supported?",id:"which-client-application-versions-are-supported",level:3},{value:"Are commercial licenses available for GameVault+?",id:"are-commercial-licenses-available-for-gamevault",level:3},{value:"What if i cant afford GameVault+?",id:"what-if-i-cant-afford-gamevault",level:3}];function c(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",br:"br",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{class:"banner",children:[(0,n.jsx)("img",{src:"/img/gamevault-plus.png",alt:"GameVault+ Banner"}),(0,n.jsx)("strong",{children:"GameVault+"})]}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsx)(t.p,{children:"Elevate Your GameVault Experience with Premium Features"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsxs)(t.p,{children:["Welcome to ",(0,n.jsx)(t.strong,{children:"GameVault+"}),", the premium upgrade subscription designed for enthusiasts seeking an enhanced GameVault experience. Here we are gradually adding a variety of exquisite nice to have features to enrich your time with GameVault while supporting us as developers and keeping this project alive. The subscription is priced affordably and is entirely optional, ensuring that our core product remains freely accessible to all."]}),"\n",(0,n.jsx)(t.h2,{id:"feature-list",children:"Feature List"}),"\n",(0,n.jsx)(t.p,{children:"As of now, we are offering the following features:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"\ud83d\udcf8 Uploading animated profile pictures"}),"\n",(0,n.jsx)(t.li,{children:"\ud83c\udfa8 Custom Themes"}),"\n",(0,n.jsx)(t.li,{children:"\ud83d\udcbb GameVault Client API (Interfaces for integrations like Playnite)"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"pricing",children:"Pricing"}),"\n",(0,n.jsxs)(t.p,{children:["The GameVault+ subscription is priced affordably at only ",(0,n.jsx)(t.strong,{children:"\u20ac 4.99/month"})," or ",(0,n.jsx)(t.strong,{children:"\u20ac 49.90/year"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"get-started",children:"Get Started"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://phalco.de/account/login",children:"Sign up or sign in"})," to your personal Phalcode account"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://phalco.de/products/gamevault-plus/checkout",children:"Subscribe to a GameVault+ Plan"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/gamevault-plus/client-setup",children:"Set up your GameVault Client Application"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.strong,{children:"Enjoy premium features while supporting us \ud83e\udd73\ud83d\udc83"})}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"questions-and-answers",children:"Questions and Answers"}),"\n",(0,n.jsx)(t.h3,{id:"what-is-phalcode",children:"What is Phalcode?"}),"\n",(0,n.jsxs)(t.p,{children:["Phalcode is the small startup company developing GameVault. We are just two friends developing software and based in germany. You can find more information about us on our ",(0,n.jsx)(t.a,{href:"https://phalco.de",children:"website"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"i-have-trouble-with-gamevault-and-i-need-support-how-can-i-contact-you",children:"I have trouble with GameVault+ and I need support. How can I contact you?"}),"\n",(0,n.jsxs)(t.p,{children:["Contact the developers ",(0,n.jsx)(t.strong,{children:"directly"})," on ",(0,n.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"})," or via our ",(0,n.jsx)(t.a,{href:"mailto:contact@phalco.de",children:"email"}),". Do ",(0,n.jsx)(t.strong,{children:"not"})," use the public discord channels for support regarding your personal GameVault+ subscription."]}),"\n",(0,n.jsx)(t.h3,{id:"how-do-i-manage-billing-and-payments",children:"How do I manage billing and payments?"}),"\n",(0,n.jsxs)(t.p,{children:["GameVault+ uses the Stripe billing system for your convenience. Easily handle your subscription, review billing details, and make changes through ",(0,n.jsx)(t.a,{href:"https://billing.stripe.com/p/login/7sI9B10uP6kj36M000",children:"our Stripe Customer Portal"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"what-payment-methods-are-accepted-for-gamevault-subscriptions",children:"What payment methods are accepted for GameVault+ subscriptions?"}),"\n",(0,n.jsx)(t.p,{children:"We offer several easy ways to pay for your GameVault+ subscription. You can use credit or debit cards, popular digital wallets, various bank redirects or even SEPA direct debit transfers. We want to make it convenient for you to choose how you pay."}),"\n",(0,n.jsx)(t.admonition,{title:"Important: Potential Delays",type:"note",children:(0,n.jsx)(t.p,{children:"Please be aware that if you use Bancontact, iDEAL, SOFORT or SEPA Direct Debit as your payment method, there might be delays in confirming your payment. To get your GameVault+ subscription quickly, we recommend using a payment method that confirms faster."})}),"\n",(0,n.jsx)(t.h3,{id:"are-there-going-to-be-more-features-added-to-gamevault",children:"Are there going to be more features added to GameVault+?"}),"\n",(0,n.jsx)(t.p,{children:"Of course!, You are the people keeping our project alive after all."}),"\n",(0,n.jsx)(t.p,{children:"Expect updates with awesome new GameVault+ content and improvements down thre road. We are committed to enhancing the GameVault+ experience."}),"\n",(0,n.jsx)(t.h3,{id:"can-gamevault-be-shared-with-multiple-users",children:"Can GameVault+ be shared with multiple users?"}),"\n",(0,n.jsx)(t.p,{children:"No, your GameVault+ subscription is designed for personal use only. Please avoid sharing it with anyone else."}),"\n",(0,n.jsx)(t.p,{children:"You can enjoy the benefits of GameVault+ on any GameVault Server you connect to. However, keep in mind that server administrators may choose to disable certain features offered by GameVault+ in their configurations."}),"\n",(0,n.jsx)(t.h3,{id:"how-many-devices-can-i-have-in-my-gamevault-subscription",children:"How many devices can I have in my GameVault+ subscription?"}),"\n",(0,n.jsx)(t.p,{children:"Your subscription isn't restricted to a specific number of active devices at the moment."}),"\n",(0,n.jsx)(t.h3,{id:"can-gamevault-be-used-offline",children:"Can GameVault+ be used offline?"}),"\n",(0,n.jsx)(t.p,{children:"Initially, you'll need an internet connection to download and set up your GameVault+ license."}),"\n",(0,n.jsx)(t.p,{children:"Once that setup is complete, GameVault+ can be accessed offline throughout your current subscription period. For those who prefer offline access, we suggest opting for an annual subscription, as it technically only requires an internet connection once a year."}),"\n",(0,n.jsx)(t.h3,{id:"how-does-gamevault-ensure-user-privacy-protection",children:"How does GameVault+ ensure user privacy protection?"}),"\n",(0,n.jsx)(t.p,{children:"At Phalcode, keeping user privacy safe is our very top priority. We use strong security measures, including encryption, to protect user data. We also follow GDPR rules to make sure we're following privacy laws."}),"\n",(0,n.jsxs)(t.p,{children:["Additionally, all billing and payment info is stored securely on the servers of our billing partner, Stripe, which meets PCI compliance standards. For more details on Stripe's security, you can check it out ",(0,n.jsx)(t.a,{href:"https://docs.stripe.com/security",children:"here"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["You can find all details in our ",(0,n.jsx)(t.a,{href:"https://phalco.de/privacy",children:"privacy policy"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"will-gamevault-support-more-integrations-with-other-software-in-the-future",children:"Will GameVault+ support more integrations with other software in the future?"}),"\n",(0,n.jsx)(t.p,{children:"We hope so. We're actively exploring partnerships and integrations with other gaming platforms and tools to provide a more interconnected gaming experience."}),"\n",(0,n.jsx)(t.h3,{id:"can-users-suggest-or-vote-on-new-features-for-gamevault",children:"Can users suggest or vote on new features for GameVault+?"}),"\n",(0,n.jsxs)(t.p,{children:["Certainly! We encourage user feedback and suggestions. While we may not implement every idea, we value community input in shaping the future of GameVault+. Share your ideas through our feedback channels, primarily on ",(0,n.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app/issues",children:"Github"})," and ",(0,n.jsx)(t.a,{href:"https://discord.gg/NEdNen2dSu",children:"Discord"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"which-client-application-versions-are-supported",children:"Which Client Application versions are supported?"}),"\n",(0,n.jsx)(t.p,{children:"GameVault+ features are available from the official GameVault Client application version 1.9.0.0 and above. It does not matter if you got it from the Microsoft Store or used an alternative installation option."}),"\n",(0,n.jsx)(t.h3,{id:"are-commercial-licenses-available-for-gamevault",children:"Are commercial licenses available for GameVault+?"}),"\n",(0,n.jsxs)(t.p,{children:["There are, but for commercial use, please ",(0,n.jsx)(t.a,{href:"mailto:contact@phalco.de",children:"contact us directly"})," to discuss an individual licensing agreement.",(0,n.jsx)(t.br,{}),"\n","Personal subscriptions are tailored for individual users, but we're happy to collaborate with businesses for customized solutions and volume licenses."]}),"\n",(0,n.jsx)(t.h3,{id:"what-if-i-cant-afford-gamevault",children:"What if i cant afford GameVault+?"}),"\n",(0,n.jsxs)(t.p,{children:["We totally understand that not everyone can afford GameVault+, and that's fine. From our perspective, you're free to ",(0,n.jsx)(t.em,{children:"tinker"})," your way around the paywall for your personal use. The source code is on ",(0,n.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-app",children:"Github"}),". But ",(0,n.jsx)(t.strong,{children:"please"})," avoid pirated versions, as they may contain malware, and also ",(0,n.jsx)(t.strong,{children:"please"})," refrain from sharing your bypass-modifications."]})]})}function d(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8358:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>o});var n=a(5271);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eda4f68b.5e7dc2d2.js b/assets/js/eda4f68b.04e17820.js similarity index 85% rename from assets/js/eda4f68b.5e7dc2d2.js rename to assets/js/eda4f68b.04e17820.js index c6139f81d..ad8f49925 100644 --- a/assets/js/eda4f68b.5e7dc2d2.js +++ b/assets/js/eda4f68b.04e17820.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9424],{4289:a=>{a.exports=JSON.parse('{"tag":{"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/ai-generated-names","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7505],{8268:a=>{a.exports=JSON.parse('{"tag":{"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/ai-generated-names","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/ee98c124.5fdca12f.js b/assets/js/ee98c124.5fdca12f.js new file mode 100644 index 000000000..50c30cc21 --- /dev/null +++ b/assets/js/ee98c124.5fdca12f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1764],{4469:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"advanced-usage/fail2ban-gamevault-guide","title":"Configuring Fail2Ban for GameVault","description":"This guide was created and tested by a community member. It hasn\'t been personally tested by our team. We cannot guarantee its effectiveness as we don\'t use fail2ban. Feel free to give it a try. If you find any errors, you can edit the guide accordingly.","source":"@site/docs/advanced-usage/failt2ban.md","sourceDirName":"advanced-usage","slug":"/advanced-usage/fail2ban-gamevault-guide","permalink":"/docs/advanced-usage/fail2ban-gamevault-guide","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/failt2ban.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"frontMatter":{"id":"fail2ban-gamevault-guide","title":"Configuring Fail2Ban for GameVault"},"sidebar":"docs","previous":{"title":"Early Access Program","permalink":"/docs/advanced-usage/early-access-program"},"next":{"title":"Running the Client on Linux","permalink":"/docs/advanced-usage/linux-client"}}');var i=n(6070),l=n(8591);const s={id:"fail2ban-gamevault-guide",title:"Configuring Fail2Ban for GameVault"},r=void 0,o={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Enable Log Files and Map a Volume",id:"1-enable-log-files-and-map-a-volume",level:3},{value:"2. Identify Failed Authentication Attempts",id:"2-identify-failed-authentication-attempts",level:3},{value:"3. Create a Fail2Ban Filter",id:"3-create-a-fail2ban-filter",level:3},{value:"4. Configure Fail2Ban Jail",id:"4-configure-fail2ban-jail",level:3},{value:"5. Restart Fail2Ban",id:"5-restart-fail2ban",level:3},{value:"6. Verify Jail Status",id:"6-verify-jail-status",level:3},{value:"Conclusion",id:"conclusion",level:2}];function c(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.admonition,{title:"Community-Created Guide",type:"note",children:(0,i.jsx)(a.p,{children:"This guide was created and tested by a community member. It hasn't been personally tested by our team. We cannot guarantee its effectiveness as we don't use fail2ban. Feel free to give it a try. If you find any errors, you can edit the guide accordingly."})}),"\n",(0,i.jsx)(a.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(a.p,{children:"This guide explains how to set up Fail2Ban to safeguard your GameVault application against unauthorized access attempts. Fail2Ban is a tool that scans log files and blocks IP addresses exhibiting malicious behavior through the firewall."}),"\n",(0,i.jsx)(a.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsx)(a.li,{children:"Fail2Ban installed on your host system"}),"\n",(0,i.jsxs)(a.li,{children:["Running GameVault instance as outlined in the ",(0,i.jsx)(a.a,{href:"/docs/server-docs/setup/",children:"server setup documentation"})]}),"\n"]}),"\n",(0,i.jsx)(a.h2,{id:"steps",children:"Steps"}),"\n",(0,i.jsx)(a.h3,{id:"1-enable-log-files-and-map-a-volume",children:"1. Enable Log Files and Map a Volume"}),"\n",(0,i.jsxs)(a.p,{children:["Ensure that log files are enabled and a volume is mapped to the ",(0,i.jsx)(a.code,{children:"/logs"})," folder within the GameVault backend container in your ",(0,i.jsx)(a.code,{children:"docker-compose.yml"})," file:"]}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-yaml",children:"[...]\ngamevault-backend:\n image: phalcode/gamevault-backend:latest\n restart: unless-stopped\n environment:\n [...]\n - SERVER_LOG_FILES_ENABLED: true # <--- Make sure this is not set to false. (Default was false before v11.0.1)\n volumes:\n [...]\n - /your/logs/folder:/logs # <--- Replace `/your/logs/folder` with the actual path to your log folder.\n[...]\n"})}),"\n",(0,i.jsx)(a.h3,{id:"2-identify-failed-authentication-attempts",children:"2. Identify Failed Authentication Attempts"}),"\n",(0,i.jsx)(a.p,{children:"Failed authentication attempts will appear in the log files in the following format:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"info: \u250f [17/Aug/2023:20:25:47 +0000] Username @ Address - GET /api/v1/users/me -> 401 - 28.231 ms - 112 - 'GameVault/1.3.0'\n"})}),"\n",(0,i.jsx)(a.h3,{id:"3-create-a-fail2ban-filter",children:"3. Create a Fail2Ban Filter"}),"\n",(0,i.jsx)(a.p,{children:"Create a filter file for Fail2Ban by opening a terminal and executing the command:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"sudo nano /etc/fail2ban/filter.d/gamevault-filter.conf\n"})}),"\n",(0,i.jsx)(a.p,{children:"Insert the following content into the file:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"[Definition]\nfailregex = .* - GET.*401\n"})}),"\n",(0,i.jsx)(a.p,{children:"Note that this regular expression may require adjustments. You can test it using the command:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"fail2ban-regex /your/logs/folder/gamevault-backend.log /etc/fail2ban/filter.d/gamevault-filter.conf\n"})}),"\n",(0,i.jsx)(a.h3,{id:"4-configure-fail2ban-jail",children:"4. Configure Fail2Ban Jail"}),"\n",(0,i.jsx)(a.p,{children:"Modify the Fail2Ban jail configuration by executing the command:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"sudo nano /etc/fail2ban/jail.local\n"})}),"\n",(0,i.jsx)(a.p,{children:"Add the following block and customize the settings based on your preferences:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-conf",children:"[gamevault]\nenabled = true\nfilter = gamevault-filter\nlogpath = /your/logs/folder/*.log*\nmaxretry = 10\nfindtime = 3600\nbantime = 3600\n"})}),"\n",(0,i.jsx)(a.h3,{id:"5-restart-fail2ban",children:"5. Restart Fail2Ban"}),"\n",(0,i.jsx)(a.p,{children:"To apply the changes, restart the Fail2Ban service:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"sudo systemctl restart fail2ban\n"})}),"\n",(0,i.jsx)(a.h3,{id:"6-verify-jail-status",children:"6. Verify Jail Status"}),"\n",(0,i.jsx)(a.p,{children:"Check the status of the GameVault jail:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-bash",children:"sudo fail2ban-client status gamevault\n"})}),"\n",(0,i.jsx)(a.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,i.jsxs)(a.p,{children:["By following these steps, you can enhance the security of your GameVault application by utilizing Fail2Ban to block IP addresses attempting unauthorized access. Remember to fine-tune the settings to suit your specific requirements. Keep in mind that the 401 response will be triggered for each unauthenticated request, which can occur frequently and become bothersome, so you may want to increase the ",(0,i.jsx)(a.code,{children:"maxretry"})," value slightly."]}),"\n",(0,i.jsxs)(a.p,{children:["Credit goes to ",(0,i.jsx)(a.a,{href:"https://stackoverflow.com/a/69575369/14570696",children:"this StackOverflow answer"})," and ",(0,i.jsx)(a.a,{href:"https://github.com/Phalcode/gamevault-backend/issues/175",children:"this Github issue"})," for inspiring this guide."]})]})}function u(e={}){const{wrapper:a}={...(0,l.R)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8591:(e,a,n)=>{n.d(a,{R:()=>s,x:()=>r});var t=n(758);const i={},l=t.createContext(i);function s(e){const a=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ee98c124.784e4902.js b/assets/js/ee98c124.784e4902.js deleted file mode 100644 index 96efd4ced..000000000 --- a/assets/js/ee98c124.784e4902.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5590],{2380:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>o,contentTitle:()=>s,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var t=n(2676),i=n(8358);const l={id:"fail2ban-gamevault-guide",title:"Configuring Fail2Ban for GameVault"},s=void 0,r={id:"advanced-usage/fail2ban-gamevault-guide",title:"Configuring Fail2Ban for GameVault",description:"This guide was created and tested by a community member. It hasn't been personally tested by our team. We cannot guarantee its effectiveness as we don't use fail2ban. Feel free to give it a try. If you find any errors, you can edit the guide accordingly.",source:"@site/docs/advanced-usage/failt2ban.md",sourceDirName:"advanced-usage",slug:"/advanced-usage/fail2ban-gamevault-guide",permalink:"/docs/advanced-usage/fail2ban-gamevault-guide",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/advanced-usage/failt2ban.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,frontMatter:{id:"fail2ban-gamevault-guide",title:"Configuring Fail2Ban for GameVault"},sidebar:"docs",previous:{title:"Early Access Program",permalink:"/docs/advanced-usage/early-access-program"},next:{title:"Running the Client on Linux",permalink:"/docs/advanced-usage/linux-client"}},o={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Enable Log Files and Map a Volume",id:"1-enable-log-files-and-map-a-volume",level:3},{value:"2. Identify Failed Authentication Attempts",id:"2-identify-failed-authentication-attempts",level:3},{value:"3. Create a Fail2Ban Filter",id:"3-create-a-fail2ban-filter",level:3},{value:"4. Configure Fail2Ban Jail",id:"4-configure-fail2ban-jail",level:3},{value:"5. Restart Fail2Ban",id:"5-restart-fail2ban",level:3},{value:"6. Verify Jail Status",id:"6-verify-jail-status",level:3},{value:"Conclusion",id:"conclusion",level:2}];function c(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.admonition,{title:"Community-Created Guide",type:"note",children:(0,t.jsx)(a.p,{children:"This guide was created and tested by a community member. It hasn't been personally tested by our team. We cannot guarantee its effectiveness as we don't use fail2ban. Feel free to give it a try. If you find any errors, you can edit the guide accordingly."})}),"\n",(0,t.jsx)(a.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(a.p,{children:"This guide explains how to set up Fail2Ban to safeguard your GameVault application against unauthorized access attempts. Fail2Ban is a tool that scans log files and blocks IP addresses exhibiting malicious behavior through the firewall."}),"\n",(0,t.jsx)(a.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsx)(a.li,{children:"Fail2Ban installed on your host system"}),"\n",(0,t.jsxs)(a.li,{children:["Running GameVault instance as outlined in the ",(0,t.jsx)(a.a,{href:"/docs/server-docs/setup/",children:"server setup documentation"})]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"steps",children:"Steps"}),"\n",(0,t.jsx)(a.h3,{id:"1-enable-log-files-and-map-a-volume",children:"1. Enable Log Files and Map a Volume"}),"\n",(0,t.jsxs)(a.p,{children:["Ensure that log files are enabled and a volume is mapped to the ",(0,t.jsx)(a.code,{children:"/logs"})," folder within the GameVault backend container in your ",(0,t.jsx)(a.code,{children:"docker-compose.yml"})," file:"]}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-yaml",children:"[...]\ngamevault-backend:\n image: phalcode/gamevault-backend:latest\n restart: unless-stopped\n environment:\n [...]\n - SERVER_LOG_FILES_ENABLED: true # <--- Make sure this is not set to false. (Default was false before v11.0.1)\n volumes:\n [...]\n - /your/logs/folder:/logs # <--- Replace `/your/logs/folder` with the actual path to your log folder.\n[...]\n"})}),"\n",(0,t.jsx)(a.h3,{id:"2-identify-failed-authentication-attempts",children:"2. Identify Failed Authentication Attempts"}),"\n",(0,t.jsx)(a.p,{children:"Failed authentication attempts will appear in the log files in the following format:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"info: \u250f [17/Aug/2023:20:25:47 +0000] Username @ Address - GET /api/v1/users/me -> 401 - 28.231 ms - 112 - 'GameVault/1.3.0'\n"})}),"\n",(0,t.jsx)(a.h3,{id:"3-create-a-fail2ban-filter",children:"3. Create a Fail2Ban Filter"}),"\n",(0,t.jsx)(a.p,{children:"Create a filter file for Fail2Ban by opening a terminal and executing the command:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"sudo nano /etc/fail2ban/filter.d/gamevault-filter.conf\n"})}),"\n",(0,t.jsx)(a.p,{children:"Insert the following content into the file:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"[Definition]\nfailregex = .* - GET.*401\n"})}),"\n",(0,t.jsx)(a.p,{children:"Note that this regular expression may require adjustments. You can test it using the command:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"fail2ban-regex /your/logs/folder/gamevault-backend.log /etc/fail2ban/filter.d/gamevault-filter.conf\n"})}),"\n",(0,t.jsx)(a.h3,{id:"4-configure-fail2ban-jail",children:"4. Configure Fail2Ban Jail"}),"\n",(0,t.jsx)(a.p,{children:"Modify the Fail2Ban jail configuration by executing the command:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"sudo nano /etc/fail2ban/jail.local\n"})}),"\n",(0,t.jsx)(a.p,{children:"Add the following block and customize the settings based on your preferences:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-conf",children:"[gamevault]\nenabled = true\nfilter = gamevault-filter\nlogpath = /your/logs/folder/*.log*\nmaxretry = 10\nfindtime = 3600\nbantime = 3600\n"})}),"\n",(0,t.jsx)(a.h3,{id:"5-restart-fail2ban",children:"5. Restart Fail2Ban"}),"\n",(0,t.jsx)(a.p,{children:"To apply the changes, restart the Fail2Ban service:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"sudo systemctl restart fail2ban\n"})}),"\n",(0,t.jsx)(a.h3,{id:"6-verify-jail-status",children:"6. Verify Jail Status"}),"\n",(0,t.jsx)(a.p,{children:"Check the status of the GameVault jail:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:"sudo fail2ban-client status gamevault\n"})}),"\n",(0,t.jsx)(a.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsxs)(a.p,{children:["By following these steps, you can enhance the security of your GameVault application by utilizing Fail2Ban to block IP addresses attempting unauthorized access. Remember to fine-tune the settings to suit your specific requirements. Keep in mind that the 401 response will be triggered for each unauthenticated request, which can occur frequently and become bothersome, so you may want to increase the ",(0,t.jsx)(a.code,{children:"maxretry"})," value slightly."]}),"\n",(0,t.jsxs)(a.p,{children:["Credit goes to ",(0,t.jsx)(a.a,{href:"https://stackoverflow.com/a/69575369/14570696",children:"this StackOverflow answer"})," and ",(0,t.jsx)(a.a,{href:"https://github.com/Phalcode/gamevault-backend/issues/175",children:"this Github issue"})," for inspiring this guide."]})]})}function u(e={}){const{wrapper:a}={...(0,i.a)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8358:(e,a,n)=>{n.d(a,{Z:()=>r,a:()=>s});var t=n(5271);const i={},l=t.createContext(i);function s(e){const a=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef8b811a.d87fafd2.js b/assets/js/ef8b811a.129793ec.js similarity index 87% rename from assets/js/ef8b811a.d87fafd2.js rename to assets/js/ef8b811a.129793ec.js index c1f75baca..e3ecc746e 100644 --- a/assets/js/ef8b811a.d87fafd2.js +++ b/assets/js/ef8b811a.129793ec.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2644],{9441:e=>{e.exports=JSON.parse('{"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null,"count":16},{"name":"Philip Sch\xe4fer","title":"Co-Founder of Phalcode","url":"https://github.com/Yelo420","imageURL":"https://github.com/Yelo420.png","key":"yelo420","page":null,"count":0}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8947],{6600:e=>{e.exports=JSON.parse('{"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null,"count":16},{"name":"Philip Sch\xe4fer","title":"Co-Founder of Phalcode","url":"https://github.com/Yelo420","imageURL":"https://github.com/Yelo420.png","key":"yelo420","page":null,"count":0}]}')}}]); \ No newline at end of file diff --git a/assets/js/f2a7e769.bec83672.js b/assets/js/f2a7e769.6ad9c320.js similarity index 85% rename from assets/js/f2a7e769.bec83672.js rename to assets/js/f2a7e769.6ad9c320.js index 89981b686..6373fb2d1 100644 --- a/assets/js/f2a7e769.bec83672.js +++ b/assets/js/f2a7e769.6ad9c320.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6522],{5714:a=>{a.exports=JSON.parse('{"tag":{"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/sharing-blog-posts","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1200],{9517:a=>{a.exports=JSON.parse('{"tag":{"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/sharing-blog-posts","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f4d4319b.275bbc67.js b/assets/js/f4d4319b.275bbc67.js deleted file mode 100644 index c09c0c2f9..000000000 --- a/assets/js/f4d4319b.275bbc67.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2500],{9550:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var s=t(2676),o=t(8358);const n={sidebar_position:1,id:"toc"},a="Setting up a GameVault Server",i={id:"server-docs/setup/toc",title:"Setting up a GameVault Server",description:"There are multiple ways to set up a GameVault Server. You can choose one from below that suits you.",source:"@site/docs/server-docs/setup/setup.md",sourceDirName:"server-docs/setup",slug:"/server-docs/setup/",permalink:"/docs/server-docs/setup/",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/setup.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:1,frontMatter:{sidebar_position:1,id:"toc"},sidebar:"docs",previous:{title:"Introduction",permalink:"/docs/intro"},next:{title:"Using Docker Compose",permalink:"/docs/server-docs/setup/docker-compose"}},d={},c=[{value:"Supported Methods",id:"supported-methods",level:2},{value:"More Methods",id:"more-methods",level:3},{value:"What Next?",id:"what-next",level:2}];function l(e){const r={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"setting-up-a-gamevault-server",children:"Setting up a GameVault Server"})}),"\n",(0,s.jsx)(r.p,{children:"There are multiple ways to set up a GameVault Server. You can choose one from below that suits you."}),"\n",(0,s.jsxs)(r.p,{children:["If you have any trouble setting up a GameVault server don't give up! There are a lot of helpful people on our ",(0,s.jsx)(r.a,{href:"https://discord.gg/NEdNen2dSu",children:"discord"})," that can help you."]}),"\n",(0,s.jsx)(r.h2,{id:"supported-methods",children:"Supported Methods"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/server-docs/setup/docker-compose",children:"Docker Compose"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/server-docs/setup/caprover",children:"Caprover"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/server-docs/setup/truenas-scale",children:"TrueNAS Scale"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/server-docs/setup/unraid",children:"UNRAID"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/server-docs/setup/synology-container-manager",children:"Synology Container Manager"})}),"\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/server-docs/setup/native",children:"Native"})}),"\n"]}),"\n",(0,s.jsx)(r.h3,{id:"more-methods",children:"More Methods"}),"\n",(0,s.jsx)(r.p,{children:"We want to add more setup options to our lineup! Each system has its own way of doing things, and it can take some time and experience to set up new options just right."}),"\n",(0,s.jsxs)(r.p,{children:["We're looking for people who are excited to help out. Since we don't run a GameVault Server on every system, we need your help to add new setup options! If you're interested in joining and setting up options for any system, we'd love to have you contribute to this documentation ",(0,s.jsx)(r.a,{href:"https://github.com/Phalcode/gamevault-docs",children:"on Github"}),". Together, we can make our platform easier for everyone to use."]}),"\n",(0,s.jsx)(r.h2,{id:"what-next",children:"What Next?"}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.strong,{children:"Congratulations! \ud83e\udd73"})}),"\n",(0,s.jsx)(r.p,{children:"You now should have a server up and running. To further set up and start using server, you can follow these steps:"}),"\n",(0,s.jsxs)(r.ol,{children:["\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Configure your server:"})," Customize the server settings to meet your specific needs. Refer to the ",(0,s.jsx)(r.a,{href:"/docs/server-docs/configuration",children:"configuration guide"})," for detailed instructions."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Add some games:"})," Prepare your game files in the required format for GameVault to identify and install them correctly. Read the ",(0,s.jsx)(r.a,{href:"/docs/server-docs/structure",children:"structure chapter"})," for important information. Once ready, proceed to ",(0,s.jsx)(r.a,{href:"/docs/server-docs/adding-games",children:"add your games"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Create your first user:"})," Set up an admin user account to gain full administrative access to the application. Refer to the ",(0,s.jsx)(r.a,{href:"/docs/server-docs/user-management",children:"user management guide"})," for instructions on setting up the first user."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"Enhance your games with metadata:"})," Connect your server to a metadata source such as IGDB to enrich your games with metadata. Learn how to do this in the ",(0,s.jsx)(r.a,{href:"/docs/server-docs/metadata-enrichment/metadata",children:"metadata chapter"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(r.li,{children:["\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.strong,{children:"(OPTIONAL) Make your server accessible outside your Local Area Network"}),": If you want to make the application accessible beyond your local network, for instance, for your friends or yourself to connect to it remotely, you'll need to configure an HTTPS reverse proxy and potentially make adjustments to firewall rules. We recommend utilizing ",(0,s.jsx)(r.a,{href:"https://nginxproxymanager.com",children:"NGINX Proxy Manager"})," for this purpose. Numerous guides are available on how to set up a reverse proxy for a Docker container, so we won't cover it in detail in this guide."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(r.p,{children:"Enjoy your new gaming experience with GameVault!"})]})}function u(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8358:(e,r,t)=>{t.d(r,{Z:()=>i,a:()=>a});var s=t(5271);const o={},n=s.createContext(o);function a(e){const r=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f4d4319b.ebd7de7e.js b/assets/js/f4d4319b.ebd7de7e.js new file mode 100644 index 000000000..09eb78352 --- /dev/null +++ b/assets/js/f4d4319b.ebd7de7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1784],{749:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"server-docs/setup/toc","title":"Setting up a GameVault Server","description":"There are multiple ways to set up a GameVault Server. You can choose one from below that suits you.","source":"@site/docs/server-docs/setup/setup.md","sourceDirName":"server-docs/setup","slug":"/server-docs/setup/","permalink":"/docs/server-docs/setup/","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/server-docs/setup/setup.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":1,"frontMatter":{"sidebar_position":1,"id":"toc"},"sidebar":"docs","previous":{"title":"Introduction","permalink":"/docs/intro"},"next":{"title":"Using Docker Compose","permalink":"/docs/server-docs/setup/docker-compose"}}');var o=t(6070),n=t(8591);const a={sidebar_position:1,id:"toc"},i="Setting up a GameVault Server",d={},c=[{value:"Supported Methods",id:"supported-methods",level:2},{value:"More Methods",id:"more-methods",level:3},{value:"What Next?",id:"what-next",level:2}];function l(e){const r={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"setting-up-a-gamevault-server",children:"Setting up a GameVault Server"})}),"\n",(0,o.jsx)(r.p,{children:"There are multiple ways to set up a GameVault Server. You can choose one from below that suits you."}),"\n",(0,o.jsxs)(r.p,{children:["If you have any trouble setting up a GameVault server don't give up! There are a lot of helpful people on our ",(0,o.jsx)(r.a,{href:"https://discord.gg/NEdNen2dSu",children:"discord"})," that can help you."]}),"\n",(0,o.jsx)(r.h2,{id:"supported-methods",children:"Supported Methods"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/docker-compose",children:"Docker Compose"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/caprover",children:"Caprover"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/truenas-scale-legacy",children:"TrueNAS Scale (prior v24.10)"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/truenas-scale",children:"TrueNAS Scale (since v24.10)"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/unraid",children:"UNRAID"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/synology-container-manager",children:"Synology Container Manager"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"/docs/server-docs/setup/native",children:"Native"})}),"\n"]}),"\n",(0,o.jsx)(r.h3,{id:"more-methods",children:"More Methods"}),"\n",(0,o.jsx)(r.p,{children:"We want to add more setup options to our lineup! Each system has its own way of doing things, and it can take some time and experience to set up new options just right."}),"\n",(0,o.jsxs)(r.p,{children:["We're looking for people who are excited to help out. Since we don't run a GameVault Server on every system, we need your help to add new setup options! If you're interested in joining and setting up options for any system, we'd love to have you contribute to this documentation ",(0,o.jsx)(r.a,{href:"https://github.com/Phalcode/gamevault-docs",children:"on Github"}),". Together, we can make our platform easier for everyone to use."]}),"\n",(0,o.jsx)(r.h2,{id:"what-next",children:"What Next?"}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.strong,{children:"Congratulations! \ud83e\udd73"})}),"\n",(0,o.jsx)(r.p,{children:"You now should have a server up and running. To further set up and start using server, you can follow these steps:"}),"\n",(0,o.jsxs)(r.ol,{children:["\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.strong,{children:"Configure your server:"})," Customize the server settings to meet your specific needs. Refer to the ",(0,o.jsx)(r.a,{href:"/docs/server-docs/configuration",children:"configuration guide"})," for detailed instructions."]}),"\n"]}),"\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.strong,{children:"Add some games:"})," Prepare your game files in the required format for GameVault to identify and install them correctly. Read the ",(0,o.jsx)(r.a,{href:"/docs/server-docs/structure",children:"structure chapter"})," for important information. Once ready, proceed to ",(0,o.jsx)(r.a,{href:"/docs/server-docs/adding-games",children:"add your games"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.strong,{children:"Create your first user:"})," Set up an admin user account to gain full administrative access to the application. Refer to the ",(0,o.jsx)(r.a,{href:"/docs/server-docs/user-management",children:"user management guide"})," for instructions on setting up the first user."]}),"\n"]}),"\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.strong,{children:"Enhance your games with metadata:"})," Connect your server to a metadata source such as IGDB to enrich your games with metadata. Learn how to do this in the ",(0,o.jsx)(r.a,{href:"/docs/server-docs/metadata-enrichment/metadata",children:"metadata chapter"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.strong,{children:"(OPTIONAL) Make your server accessible outside your Local Area Network"}),": If you want to make the application accessible beyond your local network, for instance, for your friends or yourself to connect to it remotely, you'll need to configure an HTTPS reverse proxy and potentially make adjustments to firewall rules. We recommend utilizing ",(0,o.jsx)(r.a,{href:"https://nginxproxymanager.com",children:"NGINX Proxy Manager"})," for this purpose. Numerous guides are available on how to set up a reverse proxy for a Docker container, so we won't cover it in detail in this guide."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(r.p,{children:"Enjoy your new gaming experience with GameVault!"})]})}function u(e={}){const{wrapper:r}={...(0,n.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8591:(e,r,t)=>{t.d(r,{R:()=>a,x:()=>i});var s=t(758);const o={},n=s.createContext(o);function a(e){const r=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(n.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f525eb8a.27030d53.js b/assets/js/f525eb8a.27030d53.js new file mode 100644 index 000000000..03a5e1302 --- /dev/null +++ b/assets/js/f525eb8a.27030d53.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8787],{9805:a=>{a.exports=JSON.parse('{"tag":{"label":"API","permalink":"/blog/tags/api","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/api","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f525eb8a.c495c5b2.js b/assets/js/f525eb8a.c495c5b2.js deleted file mode 100644 index 005835f54..000000000 --- a/assets/js/f525eb8a.c495c5b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[146],{9591:a=>{a.exports=JSON.parse('{"tag":{"label":"API","permalink":"/blog/tags/api","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/api","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f58fbef8.c7d8d0f3.js b/assets/js/f58fbef8.3001aa86.js similarity index 84% rename from assets/js/f58fbef8.c7d8d0f3.js rename to assets/js/f58fbef8.3001aa86.js index 751e99e82..888b9aac5 100644 --- a/assets/js/f58fbef8.c7d8d0f3.js +++ b/assets/js/f58fbef8.3001aa86.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3066],{6772:a=>{a.exports=JSON.parse('{"tag":{"label":"feedback","permalink":"/blog/tags/feedback","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/feedback","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6071],{2844:a=>{a.exports=JSON.parse('{"tag":{"label":"feedback","permalink":"/blog/tags/feedback","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/feedback","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f5b06269.d4cd8ef2.js b/assets/js/f5b06269.d4cd8ef2.js new file mode 100644 index 000000000..5052257c4 --- /dev/null +++ b/assets/js/f5b06269.d4cd8ef2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[2641],{5205:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>h,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"gamevault-plus/themes","title":"Themes","description":"With GameVault+, you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience.","source":"@site/docs/gamevault-plus/themes.md","sourceDirName":"gamevault-plus","slug":"/gamevault-plus/themes","permalink":"/docs/gamevault-plus/themes","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/themes.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"sidebarPosition":3,"frontMatter":{"title":"Themes","sidebar_position":3},"sidebar":"docs","previous":{"title":"Client Setup","permalink":"/docs/gamevault-plus/client-setup"},"next":{"title":"Client APIs","permalink":"/docs/gamevault-plus/client-apis"}}');var l=s(6070),n=s(8591);const o={title:"Themes",sidebar_position:3},i=void 0,h={},c=[{value:"Premium Themes",id:"premium-themes",level:2},{value:"Custom Themes",id:"custom-themes",level:2},{value:"How to Install and Apply a Custom Theme",id:"how-to-install-and-apply-a-custom-theme",level:3},{value:"Creating a Custom Theme",id:"creating-a-custom-theme",level:3},{value:"Template File",id:"template-file",level:4},{value:"Sharing Custom Themes",id:"sharing-custom-themes",level:3}];function r(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(t.p,{children:["With ",(0,l.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"}),", you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience."]}),"\n",(0,l.jsx)(t.h2,{id:"premium-themes",children:"Premium Themes"}),"\n",(0,l.jsx)(t.p,{children:"GameVault+ ships with the following premium themes by default:"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsxs)(t.li,{children:[(0,l.jsx)(t.strong,{children:"Phalcode (Dark)"}),": A dark theme aligned with our Phalcode brand.\n",(0,l.jsx)(t.img,{alt:"Phalcode (Dark)",src:s(3836).A+"",width:"2552",height:"1392"})]}),"\n",(0,l.jsxs)(t.li,{children:[(0,l.jsx)(t.strong,{children:"Phalcode (Light)"}),": A light theme aligned with our Phalcode brand.\n",(0,l.jsx)(t.img,{alt:"Phalcode (Light)",src:s(9750).A+"",width:"2552",height:"1392"})]}),"\n",(0,l.jsxs)(t.li,{children:[(0,l.jsx)(t.strong,{children:"Halloween (Dark)"}),": A Halloween-themed ambiance to set the mood for horror games in autumn.\n",(0,l.jsx)(t.img,{alt:"Halloween (Dark)",src:s(8275).A+"",width:"2552",height:"1392"})]}),"\n"]}),"\n",(0,l.jsx)(t.h2,{id:"custom-themes",children:"Custom Themes"}),"\n",(0,l.jsx)(t.p,{children:"GameVault+ also offers the flexibility to apply custom themes, allowing users to incorporate designs of their preference."}),"\n",(0,l.jsxs)(t.p,{children:["A public repository of custom themes shared by our community can be found ",(0,l.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-community-themes/",children:"here"}),"."]}),"\n",(0,l.jsx)(t.h3,{id:"how-to-install-and-apply-a-custom-theme",children:"How to Install and Apply a Custom Theme"}),"\n",(0,l.jsx)(t.p,{children:"To install a custom theme, follow these steps:"}),"\n",(0,l.jsxs)(t.ol,{children:["\n",(0,l.jsxs)(t.li,{children:["Place the theme .xaml file into your ",(0,l.jsx)(t.code,{children:"themes"})," folder. Depending on your GameVault installation, the ",(0,l.jsx)(t.code,{children:"themes"})," folder can be located at either ",(0,l.jsx)(t.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\themes"})," or ",(0,l.jsx)(t.code,{children:"%APPDATA%/GameVault/themes"}),"."]}),"\n",(0,l.jsxs)(t.li,{children:["Open ",(0,l.jsx)(t.code,{children:"GameVault Settings"})," and select your newly added theme under ",(0,l.jsx)(t.code,{children:"Application"})," -> ",(0,l.jsx)(t.code,{children:"Themes"}),"."]}),"\n"]}),"\n",(0,l.jsx)(t.h3,{id:"creating-a-custom-theme",children:"Creating a Custom Theme"}),"\n",(0,l.jsxs)(t.p,{children:["Creating a custom theme is straightforward. You can just create a new .xaml file based on our template and save it in the ",(0,l.jsx)(t.code,{children:"themes"})," folder."]}),"\n",(0,l.jsx)(t.h4,{id:"template-file",children:"Template File"}),"\n",(0,l.jsxs)(t.p,{children:["Just copy the latest template from the ",(0,l.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-community-themes/",children:"community themes repository"}),", edit it using a text editor, and save it in the ",(0,l.jsx)(t.code,{children:"themes"})," folder to try it out. Be aware that the hex codes are ARGB syntax and not RGB syntax."]}),"\n",(0,l.jsx)(t.h3,{id:"sharing-custom-themes",children:"Sharing Custom Themes"}),"\n",(0,l.jsxs)(t.p,{children:["You can share your custom themes with the community by creating a pull request to the ",(0,l.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-community-themes/",children:"community themes repository"}),"."]})]})}function m(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(r,{...e})}):r(e)}},8275:(e,t,s)=>{s.d(t,{A:()=>a});const a=s.p+"assets/images/halloween_dark-063c1fbaad9983d537c5440518ab0637.png"},3836:(e,t,s)=>{s.d(t,{A:()=>a});const a=s.p+"assets/images/phalcode_dark-fc73dddb830e8427cc5f8b4f31c538df.png"},9750:(e,t,s)=>{s.d(t,{A:()=>a});const a=s.p+"assets/images/phalcode_light-433333120c068cde6000d4873c096fee.png"},8591:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>i});var a=s(758);const l={},n=a.createContext(l);function o(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5b06269.e491f127.js b/assets/js/f5b06269.e491f127.js deleted file mode 100644 index 479c2491d..000000000 --- a/assets/js/f5b06269.e491f127.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5565],{9221:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>h,contentTitle:()=>o,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var a=s(2676),l=s(8358);const n={title:"Themes",sidebar_position:3},o=void 0,i={id:"gamevault-plus/themes",title:"Themes",description:"With GameVault+, you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience.",source:"@site/docs/gamevault-plus/themes.md",sourceDirName:"gamevault-plus",slug:"/gamevault-plus/themes",permalink:"/docs/gamevault-plus/themes",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/gamevault-plus/themes.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,sidebarPosition:3,frontMatter:{title:"Themes",sidebar_position:3},sidebar:"docs",previous:{title:"Client Setup",permalink:"/docs/gamevault-plus/client-setup"},next:{title:"Client APIs",permalink:"/docs/gamevault-plus/client-apis"}},h={},c=[{value:"Premium Themes",id:"premium-themes",level:2},{value:"Custom Themes",id:"custom-themes",level:2},{value:"How to Install and Apply a Custom Theme",id:"how-to-install-and-apply-a-custom-theme",level:3},{value:"Creating a Custom Theme",id:"creating-a-custom-theme",level:3},{value:"Template File",id:"template-file",level:4},{value:"Sharing Custom Themes",id:"sharing-custom-themes",level:3}];function r(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(t.p,{children:["With ",(0,a.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"}),", you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience."]}),"\n",(0,a.jsx)(t.h2,{id:"premium-themes",children:"Premium Themes"}),"\n",(0,a.jsx)(t.p,{children:"GameVault+ ships with the following premium themes by default:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Phalcode (Dark)"}),": A dark theme aligned with our Phalcode brand.\n",(0,a.jsx)(t.img,{alt:"Phalcode (Dark)",src:s(6076).Z+"",width:"2552",height:"1392"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Phalcode (Light)"}),": A light theme aligned with our Phalcode brand.\n",(0,a.jsx)(t.img,{alt:"Phalcode (Light)",src:s(6274).Z+"",width:"2552",height:"1392"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Halloween (Dark)"}),": A Halloween-themed ambiance to set the mood for horror games in autumn.\n",(0,a.jsx)(t.img,{alt:"Halloween (Dark)",src:s(8322).Z+"",width:"2552",height:"1392"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"custom-themes",children:"Custom Themes"}),"\n",(0,a.jsx)(t.p,{children:"GameVault+ also offers the flexibility to apply custom themes, allowing users to incorporate designs of their preference."}),"\n",(0,a.jsxs)(t.p,{children:["A public repository of custom themes shared by our community can be found ",(0,a.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-community-themes/",children:"here"}),"."]}),"\n",(0,a.jsx)(t.h3,{id:"how-to-install-and-apply-a-custom-theme",children:"How to Install and Apply a Custom Theme"}),"\n",(0,a.jsx)(t.p,{children:"To install a custom theme, follow these steps:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["Place the theme .xaml file into your ",(0,a.jsx)(t.code,{children:"themes"})," folder. Depending on your GameVault installation, the ",(0,a.jsx)(t.code,{children:"themes"})," folder can be located at either ",(0,a.jsx)(t.code,{children:"%USERPROFILE%\\AppData\\Local\\Packages\\Phalcode.174950BD81C41_dymsgn3qpfjxc\\LocalCache\\Roaming\\GameVault\\themes"})," or ",(0,a.jsx)(t.code,{children:"%APPDATA%/GameVault/themes"}),"."]}),"\n",(0,a.jsxs)(t.li,{children:["Open ",(0,a.jsx)(t.code,{children:"GameVault Settings"})," and select your newly added theme under ",(0,a.jsx)(t.code,{children:"Application"})," -> ",(0,a.jsx)(t.code,{children:"Themes"}),"."]}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"creating-a-custom-theme",children:"Creating a Custom Theme"}),"\n",(0,a.jsxs)(t.p,{children:["Creating a custom theme is straightforward. You can just create a new .xaml file based on our template and save it in the ",(0,a.jsx)(t.code,{children:"themes"})," folder."]}),"\n",(0,a.jsx)(t.h4,{id:"template-file",children:"Template File"}),"\n",(0,a.jsxs)(t.p,{children:["Just copy the latest template from the ",(0,a.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-community-themes/",children:"community themes repository"}),", edit it using a text editor, and save it in the ",(0,a.jsx)(t.code,{children:"themes"})," folder to try it out. Be aware that the hex codes are ARGB syntax and not RGB syntax."]}),"\n",(0,a.jsx)(t.h3,{id:"sharing-custom-themes",children:"Sharing Custom Themes"}),"\n",(0,a.jsxs)(t.p,{children:["You can share your custom themes with the community by creating a pull request to the ",(0,a.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-community-themes/",children:"community themes repository"}),"."]})]})}function m(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(r,{...e})}):r(e)}},8322:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/halloween_dark-063c1fbaad9983d537c5440518ab0637.png"},6076:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/phalcode_dark-fc73dddb830e8427cc5f8b4f31c538df.png"},6274:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/phalcode_light-433333120c068cde6000d4873c096fee.png"},8358:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>o});var a=s(5271);const l={},n=a.createContext(l);function o(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f677311a.83dee0e6.js b/assets/js/f677311a.83dee0e6.js new file mode 100644 index 000000000..355d3b323 --- /dev/null +++ b/assets/js/f677311a.83dee0e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7831],{7032:a=>{a.exports=JSON.parse('{"tag":{"label":"inclusivity","permalink":"/blog/tags/inclusivity","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/inclusivity","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f6f174b1.2d97a5ec.js b/assets/js/f6f174b1.bc13e34e.js similarity index 84% rename from assets/js/f6f174b1.2d97a5ec.js rename to assets/js/f6f174b1.bc13e34e.js index ba01f3685..b89edbdff 100644 --- a/assets/js/f6f174b1.2d97a5ec.js +++ b/assets/js/f6f174b1.bc13e34e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[7764],{3540:t=>{t.exports=JSON.parse('{"tag":{"label":"Beta Testing","permalink":"/blog/tags/beta-testing","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/beta-testing","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1922],{2334:t=>{t.exports=JSON.parse('{"tag":{"label":"Beta Testing","permalink":"/blog/tags/beta-testing","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/beta-testing","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/f81c1134.427bb239.js b/assets/js/f81c1134.a226cf0e.js similarity index 99% rename from assets/js/f81c1134.427bb239.js rename to assets/js/f81c1134.a226cf0e.js index f02ccfe5a..b9ea0c04a 100644 --- a/assets/js/f81c1134.427bb239.js +++ b/assets/js/f81c1134.a226cf0e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4031],{4108:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/2024/10/20/","metadata":{"permalink":"/blog/2024/10/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-10-20.md","source":"@site/blog/2024-10-20.md","title":"An update so major, we could have built the product from scratch.","description":"Hello, GameVault Community!","date":"2024-10-20T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Client Update","permalink":"/blog/tags/client-update"},{"inline":true,"label":"Server Update","permalink":"/blog/tags/server-update"},{"inline":true,"label":"metadata framework","permalink":"/blog/tags/metadata-framework"},{"inline":true,"label":"plugin system","permalink":"/blog/tags/plugin-system"},{"inline":true,"label":"parental control","permalink":"/blog/tags/parental-control"},{"inline":true,"label":"age restrictions","permalink":"/blog/tags/age-restrictions"},{"inline":true,"label":"theme","permalink":"/blog/tags/theme"},{"inline":true,"label":"app optimization","permalink":"/blog/tags/app-optimization"},{"inline":true,"label":"analytics","permalink":"/blog/tags/analytics"},{"inline":true,"label":"notes","permalink":"/blog/tags/notes"},{"inline":true,"label":"community management","permalink":"/blog/tags/community-management"}],"readingTime":2.515,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"An update so major, we could have built the product from scratch.","authors":["alfagun74"],"tags":["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},"unlisted":false,"nextItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"}},"content":"**Hello, GameVault Community!**\\n\\nAfter six months of hard work, we\u2019re beyond excited to unveil our biggest update yet: **GameVault Client v1.12** and **GameVault Server v13**! This release is so massive, it feels like we could\u2019ve built the product from scratch\u2014there\u2019s that much new ground covered. \x3c!-- truncate --\x3e\\n\\n### What\u2019s New?\\n\\nWe\u2019ve introduced some game-changing improvements. First and foremost, we\u2019ve moved away from unreliable third-party tools like RAWG and Google Image Scrapers for fetching video game metadata. Instead of just swapping one provider for another and making us dependant again, we\u2019ve built something much better: a brand-new **plugin system** on the backend, complete with an official partnership with **IGDB/Twitch**.\\n\\nThe new plugin framework is incredibly flexible, allowing users to write their own metadata provider plugins. It supports an unlimited number of providers, prioritizes data effectively, and even fills in any gaps intelligently. And the cherry on top? Users now have full control over metadata\u2014if you want to tweak or edit a piece of info, you can do so without changing the source data. Your custom edits are saved separately, giving you full freedom.\\n\\nWe\u2019ve been rigorously testing this system for 2\u20133 months, running an early access phase for about a month. While we\u2019ve optimized it as much as possible, we ask for your patience if any bugs pop up\u2014mastillke sure to back up before migrating!\\n\\n### Major New Features\\n\\nHere\u2019s a quick rundown of some other incredible additions in this update:\\n\\n- **Parental Controls & Age Restrictions:** Now, families can manage access based on age-appropriate content, giving more control over what\u2019s playable and viewable for children.\\n- **Built-in Media Player:** You can now watch trailers and gameplay videos directly in GameVault.\\n- **UI Overhaul:** We\u2019ve refreshed the Game, Community, and Admin Tabs, along with a redesigned App Bar for a sleeker look.\\n- **Halloween Theme:** Just in time for spooky season! GameVault+ users can enjoy a themed Halloween skin.\\n- **Convenience Features:** We\u2019ve added default arguments and launch/install executables to streamline app functionality.\\n- **Markdown Support:** Both Notes and Server News now support markdown, making formatting a breeze and improving readability.\\n\\n### Critical Update Info\\n\\nBefore updating, please ensure compatibility between clients and servers:\\n\\n- **Client v1.12** is required for servers running **v13 or above**.\\n- Older clients (**before v1.12**) won\u2019t work with server running on **Version 13 or above**.\\n\\nFor a smooth update and a guide on how to use all these new features, check out the detailed [migration instructions](https://github.com/Phalcode/gamevault-backend/blob/master/CHANGELOG.md#1300) in the server changelogs. As always, if you hit any snags, feel free to reach out to us on [Discord](https://discord.gg/NEdNen2dSu).\\n\\n### Support Us\\n\\nIf you\u2019d like to support our development and help us keep most of GameVault\u2019s features free, consider [subscribing to **GameVault+**](https://gamevau.lt/gamevault-plus) or making [a one-time donation](https://phalco.de/support-us). Although GameVault+ at the time only offers a limited set premium features, your support helps us continue making the app accessible to all.\\n\\nThank you all for supporting and using our passion project! We hope you enjoy the latest features and enhancements we\'ve added."},{"id":"/2024/05/07/","metadata":{"permalink":"/blog/2024/05/07/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-05-07.md","source":"@site/blog/2024-05-07.md","title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","description":"Hey everyone!","date":"2024-05-07T00:00:00.000Z","tags":[{"inline":true,"label":"game","permalink":"/blog/tags/game"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"database","permalink":"/blog/tags/database"},{"inline":true,"label":"videogame","permalink":"/blog/tags/videogame"},{"inline":true,"label":"RAWG","permalink":"/blog/tags/rawg"},{"inline":true,"label":"IGDB","permalink":"/blog/tags/igdb"},{"inline":true,"label":"twitch.tv","permalink":"/blog/tags/twitch-tv"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"partnership","permalink":"/blog/tags/partnership"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"solution","permalink":"/blog/tags/solution"},{"inline":true,"label":"Steam","permalink":"/blog/tags/steam"},{"inline":true,"label":"backend","permalink":"/blog/tags/backend"},{"inline":true,"label":"update","permalink":"/blog/tags/update"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"easter egg","permalink":"/blog/tags/easter-egg"}],"readingTime":2.525,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","authors":["alfagun74"],"tags":["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},"unlisted":false,"prevItem":{"title":"An update so major, we could have built the product from scratch.","permalink":"/blog/2024/10/20/"},"nextItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"}},"content":"Hey everyone!\\n\\nIn our last post we mentioned the challenges we\'ve been facing with the videogame metadata database we\'ve been using, [rawg.io](https://rawg.io/). Unfortunately, it\'s become an unmaintained abandonware, causing frequent downtime and issues like incorrect search results and registration problems. \x3c!-- truncate --\x3e The situation peaked on May 5th when the service went down completely for a day.\\n\\n## GameVault\'s new metadata provider strategy\\n\\nTo address these issues, we\'re making significant changes to GameVault\'s metadata system. Our goal is to make GameVault metadata provider agnostic, allowing users to seamlessly plug in their preferred metadata provider.\\n\\nWe\'re also excited to announce our official partnership with IGDB (twitch.tv), a trusted video game database. Going forward, GameVault will primarily use IGDB\'s APIs out of the box.\\n\\nMore details on our plans can be found in this [GitHub ticket](https://github.com/Phalcode/gamevault-backend/issues/258). We also plan to continue supporting the use of your own API keys and other vendors.\\n\\nHowever, as decided in our recent poll, we will be removing all support for RAWG.\\n\\n## Temporary solution: Implementing a RAWG replacement\\n\\nHowever, implementing these changes will take time, and we are both currently busy with work commitments and travel plans. So what happens if RAWG suddenly stops working while we\'re away? To address this concern, [Toylerrr](https://github.com/Toylerrr), one of our most valuable community members, had a great idea. He began developing a solution that would be a drop-in replacement for RAWG. An application that mimicked the behavior of RAWG, but fetched data from Steam instead. All you have to do is replace the url in the `RAWG_API_URL` environmental variable.\\n\\nWe loved the idea and built on it. Introducing [rawg-to-steam-redirect](https://github.com/Phalcode/rawg-to-steam-redirect).\\n\\nThe link above explains how it works and how you can use it today.\\n\\nWhat we liked most about it is that it required minimal backend changes to integrate. We have already tested this solution on our 667 games server and it works great. The quality of box art for example is much better. One drawback is that Steam does not have a lot of tags in its API.\\n\\nWhile `https://api.rawg.io/api` will remain the default `RAWG_API_URL` for now, you can switch between RAWG and the new solution at any time. Just make sure your GameVault backend is updated to at least v12.1.0.\\n\\n## Exciting new features\\n\\nIn addition to these changes, we\'re excited to introduce you to some new features that were recently released:\\n\\n- **\ud83d\udd16 Bookmarking Video Games:** You can now bookmark your favorite games within GameVault.\\n- **\u23ef\ufe0f Download Management:** GameVault now supports pausing, auto-resuming, and resuming downloads.\\n- **\ud83d\udd12 Encrypted Archives:** GameVault now supports password protected archives.\\n\\nWe hope these updates will make your experience with GameVault even better as we move through this transition period.\\n\\n## Supporting GameVault\\n\\nFinally, we want to thank all of you for making all of this possible. If you have not already done so, please consider upgrading to GameVault+ to flex with animated profile pictures on your server. We would really appreciate it. Bet you can\'t find the GameVault+ easter egg though... \ud83d\ude09\\n\\nWith love,\\n\\nPhalcode"},{"id":"/2024/04/14/","metadata":{"permalink":"/blog/2024/04/14/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-14.md","source":"@site/blog/2024-04-14.md","title":"GameVault+ out now","description":"Hey everyone!","date":"2024-04-14T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"DRM-free","permalink":"/blog/tags/drm-free"},{"inline":true,"label":"video games","permalink":"/blog/tags/video-games"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription","permalink":"/blog/tags/subscription"},{"inline":true,"label":"community-driven","permalink":"/blog/tags/community-driven"},{"inline":true,"label":"updates","permalink":"/blog/tags/updates"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"early access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"release","permalink":"/blog/tags/release"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"sustainability","permalink":"/blog/tags/sustainability"},{"inline":true,"label":"partnerships","permalink":"/blog/tags/partnerships"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"development","permalink":"/blog/tags/development"}],"readingTime":1.18,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault+ out now","authors":["alfagun74"],"tags":["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},"unlisted":false,"prevItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"},"nextItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"}},"content":"Hey everyone!\\n\\nWe\'re thrilled to announce that the early access phase of GameVault+ has concluded, and we\'re officially launching it today! It\'s been an incredible journey from the inception of GameVault to where we are now, and we couldn\'t have done it without your amazing support.\x3c!-- truncate --\x3e\\n\\nGameVault+ is our way of saying thank you to our dedicated supporters while also ensuring the sustainability of our platform. For a small monthly fee, you\'ll gain access to premium features designed to enhance your gaming experience within GameVault. We\'re starting with features like animated profile pictures, custom themes, and activation of the GameVault Client API, with more exciting additions planned for the future.\\n\\nBut our work doesn\'t stop here. We\'re committed to refining GameVault+ based on your feedback, as well as addressing key areas of improvement in the platform. This includes exploring partnerships with reputable video game databases to enhance our data offerings and refactoring our client application for optimal performance.\\n\\nAnd most importantly, we want you, our community, to have a say in the future direction of GameVault. That\'s why we\'re opening up the floor for feature suggestions through our Discord channel. Your input will help shape the next big updates to GameVault.\\n\\nThank you all for your support and enthusiasm. We\'re excited to continue this journey with you and to make gaming even more enjoyable for everyone. Stay tuned for more updates, and happy gaming!"},{"id":"/2024/04/01/2024-04-01/","metadata":{"permalink":"/blog/2024/04/01/2024-04-01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-01/2024-04-01.md","source":"@site/blog/2024-04-01/2024-04-01.md","title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","description":"Hey Everyone!","date":"2024-04-01T00:00:00.000Z","tags":[{"inline":true,"label":"April Fools","permalink":"/blog/tags/april-fools"}],"readingTime":1.605,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","authors":["alfagun74"],"tags":["April Fools"]},"unlisted":false,"prevItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"},"nextItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"}},"content":"Hey Everyone!\\n\\nThe moment you\'ve been waiting for is finally here. We\'ve been working hard on it for months and are thrilled to announce that GameVault Client Application is **now available on Windows Phone 7**, powered by **Microsoft Silverlight**!\x3c!-- truncate --\x3e\\n\\n![Windows Phone](winphone.png)\\n\\nThe Current PC-Version of GameVault will be discontinued soon and will no longer be available to download from the Microsoft Store, as the technology is too new and not well supported yet. We needed a battle-tested framework to ensure compatibility, so we decided to switch to Windows Phone 7 and Silverlight. Also, the mobile platform just has massive market share, compared to PC.\\n\\nWe understand the excitement and anticipation surrounding this release, and we\'re just as eager as you are to see how this integration will enhance your experience.\\n\\nWith GameVault on your Windows Phone 7 device, you can carry your favorite games with you wherever you go. Whether you\'re battling fierce foes, exploring vast virtual worlds, or simply passing the time with a quick puzzle game, GameVault ensures that the thrill of gaming is always at your fingertips.\\n\\nThanks to the seamless integration with Microsoft Silverlight, navigating through your game library has never been smoother or more intuitive. The Metro Live Tiles add a touch of elegance to the user interface, making it a joy to browse through your collection and discover new games.\\n\\nAnd the best part? This is just the beginning. Our team is already hard at work on further enhancements and features, including the highly anticipated Holodeck edition of GameVault aswell as the new integrated \\"Bird Feeding Timer\\" feature, that automatically warns you when your pets are about to starve.\\n\\nWe\'re incredibly excited to embark on this journey with you and to continue pushing the boundaries of innovation. So what are you waiting for? Head over to the Windows Phone Store and migrate today to start your gaming adventure!\\n\\nHappy gaming... and April Fools!"},{"id":"/2024/03/28/","metadata":{"permalink":"/blog/2024/03/28/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-03-28.md","source":"@site/blog/2024-03-28.md","title":"Announcing GameVault+ (coming soon)","description":"Hey Everyone!","date":"2024-03-28T00:00:00.000Z","tags":[{"inline":true,"label":"startup","permalink":"/blog/tags/startup"},{"inline":true,"label":"software","permalink":"/blog/tags/software"},{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription model","permalink":"/blog/tags/subscription-model"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"}],"readingTime":3.725,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Announcing GameVault+ (coming soon)","authors":["alfagun74"],"tags":["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},"unlisted":false,"prevItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"},"nextItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"}},"content":"Hey Everyone!\\n\\nIt feels like it\'s been ages since we last caught up regarding the development of [GameVault (the self-hostable platform for drm-free videogames)](https://gamevau.lt), but trust me, the silence from our end doesn\'t mean we\'ve been slacking off. In fact,quite the opposite has been happening behind the scenes. \x3c!-- truncate --\x3e \\n\\nWhen my friend and I first launched this application, it was born out of a simple need for a solution to a problem we thought was very particular and only for ourselves. Having a steam-like platform for game files lying on my home server.\\n\\nWe never imagined it would resonate with others or find its own place in the market. Frankly, we thought it might end up just another forgotten repository on GitHub, gathering virtual dust with no one paying it any mind.\\n\\nBut boy, were we wrong. The response to our app was unexpectedly large and overwhelming. Thousands of people are using GameVault today, and it seems there\'s quite a demand out there for the exact product we\'ve been building.\\n\\nWe\u2019re a small indie team of two and despite juggling multiple jobs, we\'ve poured our hearts and souls into this project during our spare times, striving to offer a self-hosted alternative to the gaming platforms out there. And while we\'ve received some generous donations (_shoutout to our two loyal monthly donors btw \u2013 you know who you are, and we\'re endlessly grateful!_), it\'s clear that relying solely on sporadic tips isn\'t sustainable for the long term and we need financial support to maintain our services and justify our time investment towards our families.\\n\\nSo, it\'s time for a slight change. We\'re thrilled to announce the upcoming release of a new version of our client application, complete with an **optional** subscription model we\'re calling...\\n\\n## [GameVault+](https://gamevau.lt/docs/gamevault-plus/introduction)\\n\\n## What is GameVault+?\\n\\nFirst, to clear some of the confusion:\\n\\n**No, this is not some shady scammy \\"We\'re going enterprise\\" rugpull**.\\nThe core of GameVaults upcoming features and the features you enjoyed until now will always remain free. Additionally the system is [designed to be easily bypassed if you can\'t or dont want to afford it.](https://gamevau.lt/docs/gamevault-plus/introduction/#what-if-i-cant-afford-gamevault)\\n\\n[It was long planned on our board and well discussed within our community](https://github.com/Phalcode/gamevault-app/issues/151). Think of [GameVault+](https://gamevau.lt/docs/gamevault-plus/introduction) as our way of saying \\"thank you\\" to our supporters and to motivate them to support us regularly. To be more specific, it\'s us giving back some goodie-features that are not necessarily needed to use GameVault back to our supporters, while they help us keep the lights on here at Phalcode.\\n\\nWith GameVault+, you\'ll gain access to premium nice-to-have features designed to enhance your GameVault experience, all for a small monthly fee of \u20ac4,99 monthly or \u20ac49.90 anually.\\n\\nCurrently, these features include:\\n\\n- Uploading animated profile pictures\\n- Applying Custom Themes\\n- Activation of the GameVault Client API (CLI, URI, and NamedPipe Interfaces Used for client integrations with 3rd party tools like Playnite)\\n\\nBut there are more to come! We will be enhancing this offering with more features, whenever we see room for it, as GameVault+ subscribers are the ones, who keep this project alive.\\n\\nAll details and a Q&A are on the [GameVault+ page](https://gamevau.lt/docs/gamevault-plus/introduction).\\n\\n**We\'ll be rolling out this new product today to our early access users first** to get the product and the infrastructure around it tested, tweaking and refining it based on your feedback before making it available to everyone. It\'s an exciting new chapter for us, and we can\'t wait to have you along for the ride.\\n\\n## So what\'s next?\\n\\nWe will polish the rough edges of GameVault+ and bring it to life in the next few weeks, hopefully. You will probably already see some documentation on this website for it. Keep in mind, this is all a work in progress, and we will announce the final release soon.\\n\\nAfter that, we will need to urgently find a solution to our heavy reliance on the [degrading and unmaintained RAWG Database](https://discord.com/channels/1100920639667306496/1134496308846137404/1217726870959820861). We are already in contact for potential partnerships with Video-Game Databases.\\n\\nFinally, we will need to do some refactoring of our client application\'s architecture.\\n\\nBut stay tuned because once all of this is done, the Next Big Feature we\'ll be focusing on will be open for **the community to decide** in [our #polls channel on Discord](https://discord.gg/NEdNen2dSu). So make sure to join \\"The Council\\" to get notified and vote on your most desired feature.\\n\\nThank you all for supporting us and looking forward to seeing you all on our next updates!"},{"id":"/2023/12/09/","metadata":{"permalink":"/blog/2023/12/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-12-09.md","source":"@site/blog/2023-12-09.md","title":"Join the GameVault Early-Access Program Now!","description":"Hey, Guys!","date":"2023-12-09T00:00:00.000Z","tags":[{"inline":true,"label":"Gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Early Access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"UI Update","permalink":"/blog/tags/ui-update"},{"inline":true,"label":"Beta Testing","permalink":"/blog/tags/beta-testing"},{"inline":true,"label":"Community Feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview"},{"inline":true,"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers"}],"readingTime":1.135,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Join the GameVault Early-Access Program Now!","authors":["alfagun74"],"tags":["Gaming","GameVault","Early Access","UI Update","Beta Testing","Community Feedback","Exclusive Preview","Microsoft Store","Discord","Gaming Servers"]},"unlisted":false,"prevItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"},"nextItem":{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/"}},"content":"Hey, Guys!\\n\\nFor the upcoming large UI update of GameVault, we\'re launching a brand new GameVault Early-Access Program, and we want **YOU** to be a part of it!\x3c!-- truncate --\x3e\\n\\n## What\'s the Early-Access Program?\\n\\nEarly-Access is your golden ticket to test-drive upcoming GameVault updates before anyone else. You\'ll be part of an exclusive group and get a sneak peek into the latest features, but here\'s the deal \u2013 it might not be as stable as our regular releases and you need to interact with us. Your feedback will help us fine-tune everything before the big release for everyone else.\\n\\n## How to Join\\n\\n:clipboard: Complete the [Application Form](https://forms.gle/RQvEGfWeUFPBCUaG6) \\n:date: The first early-access phase kicks off on December 17 and lasts for one week.\\n\\n## Prerequisites\\n\\n:speech_balloon: Active participation in the designated Discord channel. \\n:video_game: GameVault installed from the Microsoft Store with a Microsoft Account logged in. If not, grab it [here](https://www.microsoft.com/store/apps/9PCKDV76GL75). \\n:rocket: A GameVault Server running the **phalcode/gamevault-backend:early-access** image. (Only run this if you are accepted as a Tester as it could break things!)\\n\\n### Important Note\\n\\n- There are only a limited number of slots in the Early-Access Program. Supporters and Trusted Members are prioritized.\\n- If you\'re accepted and later found not meeting the requirements, you might be removed from future testing and the next applicant on our list gets the opportunity.\\n\\n[Apply here!](https://forms.gle/RQvEGfWeUFPBCUaG6)"},{"id":"/2023/11/20/","metadata":{"permalink":"/blog/2023/11/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-11-20.md","source":"@site/blog/2023-11-20.md","title":"A Look Back and a Glimpse Forward","description":"Hello,","date":"2023-11-20T00:00:00.000Z","tags":[{"inline":true,"label":"Game Development","permalink":"/blog/tags/game-development"},{"inline":true,"label":"Software Updates","permalink":"/blog/tags/software-updates"},{"inline":true,"label":"Gaming Community","permalink":"/blog/tags/gaming-community"},{"inline":true,"label":"UI Redesign","permalink":"/blog/tags/ui-redesign"},{"inline":true,"label":"Development Milestones","permalink":"/blog/tags/development-milestones"},{"inline":true,"label":"Tech Progress","permalink":"/blog/tags/tech-progress"},{"inline":true,"label":"Future Features","permalink":"/blog/tags/future-features"},{"inline":true,"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey"},{"inline":true,"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle"},{"inline":true,"label":"November Update","permalink":"/blog/tags/november-update"}],"readingTime":2.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A Look Back and a Glimpse Forward","authors":["alfagun74"],"tags":["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},"unlisted":false,"prevItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"},"nextItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"}},"content":"Hello,\\n\\nIt\'s been a while since we caught up here, but if you\'ve been following the action on [Discord](https://discord.gg/NEdNen2dSu), you\'re up to speed. Nevertheless, this blog remains your spot for the key updates and announements.\x3c!-- truncate --\x3e\\n\\nLet\'s dive into what\'s been happening with GameVault since release and what\'s on the horizon. We\'ve hit version 9 on the backend and 1.7 on the frontend, showcasing our commitment to continuous improvement.\\n\\nAlongside the usual optimizations and bug fixes, we\'ve been paying a lot of attention to your feature requests and implemented a bunch of them.\\n\\nHere\'s the highlight reel:\\n\\n- Auto Extraction and Installation of Videogames\\n- Uninstalling Games through GameVault\\n- Uploading Images\\n- Support for more Archive Formats\\n- Bandwidth Control Features\\n- Database Backups & Restorations\\n- Crash Reporting\\n- Random Game Finder\\n\\nSo, what\'s cooking now? We asked for your top three desired features recently, and here are the results:\\n\\n1. UI Redesign for the Library and Installations Tab\\n2. Support for ROMS and Emulators\\n3. Support for extra files like Soundtracks, Mods, etc.\\n\\nBy the way, if you want to take part in polls like this in the future aswell, make sure to become a council member on [Discord](https://discord.gg/NEdNen2dSu)!\\n\\nRight now we\'re knee-deep in redesigning the Library, the heart of our application. Big changes are on the way, waving goodbye to the installations tab and ushering in a sleeker UI for Library, Game View, and Game Settings.\\n\\nHere are some sneak peeks and mockups: (still work in progress):\\n\\n1. Library (Mockup)\\n ![Filters](/img/blog/2023-11-19/filters.png)\\n ![Empty States](/img/blog/2023-11-19/emptystates.png)\\n2. Library (current implementation)\\n ![Library](/img/blog/2023-11-19/library.png)\\n3. Game (Mockup)\\n ![Game View](/img/blog/2023-11-19/game.png)\\n4. Game Settings (Mockup)\\n ![Game Settings](/img/blog/2023-11-19/settings.png)\\n\\nRemember, these are teasers. Anything can look different once it ships. There\'s a lot of work left, and we\'re on it. To be technical here: Most of these modern controls require us to rewrite WPF Controls from the core. On the backend, we\'re not slacking either \u2013 tons of end-to-end tests are being written to ensure our app\'s reliability.\\n\\nExcited about the new UI or got something to say? Head over to [Discord](https://discord.gg/NEdNen2dSu) and spill the beans!\\n\\nWe\'re eager to wrap up these tasks and ship the update out to you guys.\\n\\nWe also wanted to mention we\'ve already crossed 2000 GameVault users with a growing engaged [Discord](https://discord.gg/NEdNen2dSu) community of 350 members!\\n\\nAnd your donations help keeping the lights on, though we\'re not rolling in dough just yet. Every penny counts, and we\'re truly grateful. Thanks a lot. \u2764\ufe0f\\n\\nHelp us promote GameVault among fellow self-hosters. Your efforts could inspire a bored developer to join and contribute to our project!\\n\\nStay tuned for the UI update \u2013 we\'ll be back in touch soon.\\n\\nUntil then, happy gaming! \ud83c\udfae"},{"id":"/2023/07/29/","metadata":{"permalink":"/blog/2023/07/29/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-29.md","source":"@site/blog/2023-07-29.md","title":"Please help us prioritize!","description":"Hello everyone!","date":"2023-07-29T00:00:00.000Z","tags":[{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"roadmap","permalink":"/blog/tags/roadmap"},{"inline":true,"label":"collaboration","permalink":"/blog/tags/collaboration"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"GitHub","permalink":"/blog/tags/git-hub"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"Kanban Board","permalink":"/blog/tags/kanban-board"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"Council Member","permalink":"/blog/tags/council-member"},{"inline":true,"label":"polls","permalink":"/blog/tags/polls"},{"inline":true,"label":"gaming experience","permalink":"/blog/tags/gaming-experience"}],"readingTime":1.995,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Please help us prioritize!","authors":["alfagun74"],"tags":["community","GameVault","development","roadmap","collaboration","feedback","GitHub","voting","features","platform","Kanban Board","Discord","Council Member","polls","gaming experience"]},"unlisted":false,"prevItem":{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/"},"nextItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"}},"content":"Hello everyone!\\n\\nWe hope you\'re all doing well. We wanted to take a moment to express our heartfelt gratitude for the flood of feature requests and bug reports that have been pouring into our issue trackers. \x3c!-- truncate --\x3e Your enthusiasm and dedication to making GameVault even better are truly inspiring to us.\\n\\nAs many of you may already know, GameVault is a passion project for us, and while we are mostly convinced by your fantastic ideas, it may take some time for us to implement them. Our team meetings happen in our free time, and although we genuinely want to incorporate your suggestions into our roadmap, we are limited by the time and capacity we can dedicate to the project. Moreover, we want to ensure that the features we develop are refined, polished, and also the most desired in the users\' opinions, which adds to the timeline.\\n\\nWe believe that collaboration with our incredible community is the key to success, and that\'s why we want to introduce you to our Roadmap. It displays all new issues, planned tasks we want to work on, and all the ongoing work in a well-organized Kanban Board. [You can find it right here.](https://github.com/orgs/Phalcode/projects/4)\\n\\nTo ensure that GameVault\'s development aligns better with your needs, we kindly request your active participation. By voting on GitHub with a Thumbs Up or a Thumbs Down on new and planned issues, you can help us prioritize them effectively. We value your opinion: What features do you feel are most crucial? What aspects of the platform do you find most bothersome? What issues do you see as unnecessary or bloated? Your input will mainly shape the direction we take.\\n\\nIf you\'re eager to go the extra mile and actively contribute to shaping GameVault further, we invite you to [join our Discord community](https://discord.gg/NEdNen2dSu) and becoming a \\"Council Member\\". By becoming a \\"Council Member\\" and enabling Poll Notifications under \\"#Channels & Roles\\", you will have a direct say in the future of GameVault because you will get notifications about opinion polls we run from time to time.\\n\\nWe cannot stress enough how much we appreciate your involvement in our endeavor to create the ultimate gaming experience for all of you. Your passion and feedback are invaluable, and we are committed to making GameVault the best it can be, together.\\n\\nThank you for being part of this amazing journey with us!"},{"id":"/2023/07/24/","metadata":{"permalink":"/blog/2023/07/24/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-24.md","source":"@site/blog/2023-07-24.md","title":"Celebrating 600+ Installations and announcing the upcoming big feature","description":"Hey everyone,","date":"2023-07-24T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone"},{"inline":true,"label":"official installations","permalink":"/blog/tags/official-installations"},{"inline":true,"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth"},{"inline":true,"label":"gratitude","permalink":"/blog/tags/gratitude"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault"},{"inline":true,"label":"upcoming update","permalink":"/blog/tags/upcoming-update"},{"inline":true,"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline"},{"inline":true,"label":"simplifying game installation","permalink":"/blog/tags/simplifying-game-installation"},{"inline":true,"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue"},{"inline":true,"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role"},{"inline":true,"label":"Lemmy community launch","permalink":"/blog/tags/lemmy-community-launch"},{"inline":true,"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"support request","permalink":"/blog/tags/support-request"},{"inline":true,"label":"continued support","permalink":"/blog/tags/continued-support"},{"inline":true,"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","authors":["alfagun74"],"tags":["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},"unlisted":false,"prevItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"},"nextItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"}},"content":"Hey everyone,\\n\\nWe\'re excited to share some great news with you all! GameVault has reached a small milestone with over 600 official installations of our GameVault Client Application. \x3c!-- truncate --\x3e What\'s even more amazing is that around 200 dedicated users, a third of these installations, have joined our [Discord](https://discord.gg/NEdNen2dSu) community to connect, chat, and share their experiences.\\n\\nWe want to express our immense gratitude for your incredible support, feedback, and love for GameVault. Your ongoing encouragement inspires us to push boundaries and enhance your gaming experience. We\'re thrilled to announce that an awesome update is being worked on right now - the highly anticipated release of GameVault\'s Installation Pipeline!\\n\\n#### GameVault\'s Installation Pipeline\\n\\nThe Installation Pipeline is designed to revolutionize how you install and manage your games. It was suggested by members on our [Discord server](https://discord.gg/NEdNen2dSu). We understand the challenges of navigating through different installation processes, especially for family members who may not be tech-savvy. With the Installation Pipeline, our goal is to simplify the entire process and make it user-friendly. Whether you\'re an experienced gamer or not, this update will make installing games easier for you.\\n\\nYou can read the details [here on the GitHub issue](https://github.com/Phalcode/gamevault-app/issues/18).\\n\\nStay tuned for its upcoming release, and to be among the first to try out this awesome feature, make sure to subscribe to the `@Updates` Role on our [Discord server](https://discord.gg/NEdNen2dSu) , if you haven\'t already. We\'ll ping you as soon as it\'s live!\\n\\n#### Join us on Lemmy\\n\\nTo further connect with our amazing community, we\'re excited to announce the launch of our [official Lemmy community](https://lemmy.world/c/phalcode). From now on, we\'ll also regularly share new blog posts there, providing you with more ways to stay informed and engaged. Join the Lemmy forum and become part of the growing GameVault community!\\n\\n#### Share GameVault with Others\\n\\nAs we celebrate this milestone and eagerly anticipate more exciting updates, we invite you to spread the word about GameVault among your friends, family, and gaming or self-hosting communities. Your personal recommendations and referrals have played a significant role in our journey so far, and we believe they\'ll continue to do so in the future.\\n\\nWe want to express our heartfelt appreciation for the feature requests, discussions, and invaluable help on our GitHub. Your support and collaborative efforts help a lot.\\n\\n#### Support Us\\n\\nAs we move forward, we kindly ask for your continued support. GameVault\'s success is currently solely built upon our incredible community, and your encouragement is what fuels us. If you love our app and believe in our vision, please consider supporting us in any way you can. It could even be something simple like a rating on the Microsoft Store. Your backing empowers us to keep our hard work going.\\n\\nWe\'re eagerly looking forward to celebrating more achievements with all of you.\\n\\nStay tuned, stay connected, and let\'s continue this journey together!"},{"id":"/2023/07/20/","metadata":{"permalink":"/blog/2023/07/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-20.md","source":"@site/blog/2023-07-20.md","title":"The Migrations are finally completed","description":"Hey folks,","date":"2023-07-20T00:00:00.000Z","tags":[{"inline":true,"label":"app name migration","permalink":"/blog/tags/app-name-migration"},{"inline":true,"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication"},{"inline":true,"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users"},{"inline":true,"label":"Discord server promotion","permalink":"/blog/tags/discord-server-promotion"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering"},{"inline":true,"label":"box representation","permalink":"/blog/tags/box-representation"},{"inline":true,"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation"},{"inline":true,"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"The Migrations are finally completed","authors":["alfagun74"],"tags":["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},"unlisted":false,"prevItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"},"nextItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"}},"content":"Hey folks,\\n\\nGreat news. We\'ve successfully migrated our App name in its entirety and will resume advertising as soon as it\'s published on the Microsoft Store. \x3c!-- truncate --\x3e\\n\\nJust a heads up, there might be a surge of new users joining the [Discord](https://discord.gg/NEdNen2dSu) server due to us promoting GameVault across all available platforms now.\\n\\nYou\'re welcome to join in and spread the word about GameVault with your friends, family, social network, or colleagues!\\n\\n**Let\'s decipher the mystery behind the new logo:**\\n![logo](/img/blog/2023-07-19/logo-text-and-image-sbs.png)\\n\\n- The Box represents a Vault with a Keyhole, but it also symbolizes a game dice.\\n- The Keyhole represents a Keyhole, and simultaneously signifies a game piece.\\n\\nDid you find the logo concept creative? Share your thoughts on [discord](https://discord.gg/NEdNen2dSu)!"},{"id":"/2023/07/19/","metadata":{"permalink":"/blog/2023/07/19/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-19.md","source":"@site/blog/2023-07-19.md","title":"Quick Migration Update and new Logo","description":"Hey guys,","date":"2023-07-19T00:00:00.000Z","tags":[{"inline":true,"label":"name migration progress","permalink":"/blog/tags/name-migration-progress"},{"inline":true,"label":"backend application migration","permalink":"/blog/tags/backend-application-migration"},{"inline":true,"label":"documentation migration","permalink":"/blog/tags/documentation-migration"},{"inline":true,"label":"domain acquisition","permalink":"/blog/tags/domain-acquisition"},{"inline":true,"label":"Subreddit migration","permalink":"/blog/tags/subreddit-migration"},{"inline":true,"label":"Lemmy community","permalink":"/blog/tags/lemmy-community"},{"inline":true,"label":"Client Application update","permalink":"/blog/tags/client-application-update"},{"inline":true,"label":"testing","permalink":"/blog/tags/testing"},{"inline":true,"label":"new logo","permalink":"/blog/tags/new-logo"},{"inline":true,"label":"speculation","permalink":"/blog/tags/speculation"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"},{"inline":true,"label":"migration finalization","permalink":"/blog/tags/migration-finalization"}],"readingTime":0.965,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Quick Migration Update and new Logo","authors":["alfagun74"],"tags":["name migration progress","backend application migration","documentation migration","domain acquisition","Subreddit migration","Lemmy community","Client Application update","testing","new logo","speculation","Discord channel","migration finalization"]},"unlisted":false,"prevItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"},"nextItem":{"title":"A New Name","permalink":"/blog/2023/07/15/"}},"content":"Hey guys,\\n\\nWe have a brief update on the progress of the name migration.\\n\\nWe\'ve successfully completed the migration of the backend application, which is now accessible as `gamevault-backend`. \x3c!-- truncate --\x3e\\n\\nFurthermore, we\'ve migrated the documentation and acquired this domain gamevau.lt. We\'ve set up redirects for our previous domain and the demo server as well.\\n\\nLastly we migrated our Subreddit to [r/Phalcode](https://reddit.com/r/Phalcode) and opened up a new community on [Lemmy](https://lemmy.world/c/phalcode). All further Updates and discussions regarding GameVault can be found there.\\n\\nWe\'re nearly finished, you might say.\\n\\nThe only remaining task is the Client Application. We\'re actively working on it and currently testing the application on our developer edition. Soon, you\'ll be able to seamlessly update your client with the new name and appearance.\\n\\nIn the meantime, our graphic designer has crafted a fresh logo for our new name, GameVault.\\n\\n![logo](/img/blog/2023-07-19/logo-text-and-image-sbs.png)\\n\\nTo make good use of your time while the migrations are in progress, what do you speculate the new logo represents?\\n\\nShare your theories in gamevaults #chat channel on [discord](https://discord.gg/NEdNen2dSu)! We\'ll reveal the answer and shoutout the winner(s) in the next blog post, once the migration is finalized!\\n\\nUntil then \u270c\ufe0f"},{"id":"/2023/07/15/","metadata":{"permalink":"/blog/2023/07/15/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-15.md","source":"@site/blog/2023-07-15.md","title":"A New Name","description":"Hey everyone,","date":"2023-07-15T00:00:00.000Z","tags":[{"inline":true,"label":"poll results","permalink":"/blog/tags/poll-results"},{"inline":true,"label":"renaming app","permalink":"/blog/tags/renaming-app"},{"inline":true,"label":"community feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"GameStash","permalink":"/blog/tags/game-stash"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameShelf","permalink":"/blog/tags/game-shelf"},{"inline":true,"label":"Harbor","permalink":"/blog/tags/harbor"},{"inline":true,"label":"GameHub","permalink":"/blog/tags/game-hub"},{"inline":true,"label":"market analysis","permalink":"/blog/tags/market-analysis"},{"inline":true,"label":"new name announcement","permalink":"/blog/tags/new-name-announcement"},{"inline":true,"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain"},{"inline":true,"label":"special thanks","permalink":"/blog/tags/special-thanks"},{"inline":true,"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast"},{"inline":true,"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter"},{"inline":true,"label":"transition process","permalink":"/blog/tags/transition-process"}],"readingTime":3.85,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A New Name","authors":["alfagun74"],"tags":["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},"unlisted":false,"prevItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"},"nextItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"}},"content":"Hey everyone,\\n\\nWe are thrilled to announce that the poll for choosing a new name for our app is finally over. The process of transitioning to the new name will commence very soon, and we can\'t wait to share the exciting updates with you.\x3c!-- truncate --\x3e\\n\\nBut first, let\'s dive into the poll results and shed some light on the important facts without further delay:\\n\\n## Summary\\n\\nIn total, 71 people participated in the poll, providing us with valuable data to draw conclusions from. Here\'s a summary of the key findings:\\n\\n- 52.1% of the community voted against using any terms related to piracy in the app. We understand and respect this choice because it would harm our business and attract the wrong users, as we have no affiliation with piracy.\\n\\n- 42.3% of the community voted to recommend the app under a different name but not with its current name. This feedback motivated us to rename the app, confirming that it wasn\'t just a few critics on Reddit. We want to expand our community to include the families, friends, and colleagues of these people. So please, help us spread the word about the name change!\\n\\n- 36.6% of you said you wouldn\'t contribute to our app at all solely because of its name, even if you had the opportunity. We depend on these contributions to grow and improve, so we now encourage you to participate!\\n\\nWithout further ado, here are the top 5 names that emerged as winners in the poll:\\n\\n1. GameStash (38%)\\n2. GameVault (35.2%)\\n3. GameShelf (31%)\\n4. Harbor (29.6%)\\n5. GameHub (28.2%)\\n\\nAs mentioned earlier, we conducted the poll without conducting market analysis beforehand. However, we recognized the significance of making an informed decision for the benefit of the community. Consequently, we proceeded to analyze each name after the poll to ensure the chosen name resonates with our vision.\\n\\nAllow us to share the summarized results of our market analysis:\\n\\n## Market Analysis\\n\\n### 1. GameStash\\n\\nGoogle Search Results: ~33,600 \\nPossible Domains: gamestash.de\\n\\n- There\'s already an app called [GameStash](https://gamestash.app/) that offers similar features to ours.\\n\\n### 2. GameVault\\n\\nGoogle Search Results: ~800,000 \\nPossible Domains: gamevau.lt, game-vault.de\\n\\n- The term \\"GameVault\\" is associated with a popular online casino/gambling application called [GameVault999](https://gamevault999.com/).\\n\\n### 3. GameShelf\\n\\nGoogle Search Results: ~560,000 \\nPossible Domains: gameshelf.de\\n\\n- The name \\"Gameshelf\\" is already used by two existing applications. One is a [Board-Game-Collection Viewer](https://gameshelf.io/), and the other is a [Gaming Backlog](https://gameshelf.dev) app.\\n\\n### 4. Harbor\\n\\nGoogle Search Results: ~393,000,000 \\nPossible Domains: harborapp.de\\n\\n- \\"Harbor\\" is a very common word, making it challenging to find a suitable domain that aligns with our brand identity.\\n\\n- Additionally, there\'s a well-known app called [Harbor on the Market](https://goharbor.io) related to Docker/Kubernetes.\\n\\n### 5. GameHub\\n\\nGoogle Search Results: ~5,690,000\\nPossible Domains: gamehubapp.de\\n\\n- [GameHub](https://github.com/tkashkin/GameHub) is a popular game library manager\\n- it also sounds like a popular adult site \ud83d\ude01\\n\\n## What\'s Next?\\n\\nWe understand your eagerness for a new name, and we are equally committed to distancing ourselves from the old one. Taking into account all the suggested names and feedback, we engaged in extensive internal brainstorming, free from outside influences.\\n\\nWe sought a name that is descriptive, intuitive, and effectively conveys the purpose of our app. Additionally, we aimed for a name that is easily memorable and emphasizes the ownership and control of a self-hosted server, security, and exclusivity.\\n\\nIntroducing our new name: **GameVault** \\nAvailable soon under this domain: [gamevau.lt](https://gamevau.lt)\\n\\nWe have already secured the domain and registered the name wherever possible. The transition process will commence shortly. We are eager to hear your thoughts on the new name. Do you like it?\\n\\n## Special Thanks \u2764\ufe0f\\n\\nWell, as you all know, this was quite a journey to get here, and we wanted to give our special thanks to:\\n\\n- Everybody who gave this project\'s idea a chance, even if the name was kind of weird.\\n\\n- Everybody who made suggestions on our [Discord](https://discord.gg/NEdNen2dSu) server and participated in the discussions.\\n\\n- Everybody who voted.\\n\\n- A special shoutout to @KairuByte on [Discord](https://discord.gg/NEdNen2dSu) for coming up with the name GameVault.\\n\\n- We would also like to extend our gratitude to [The Selfhosted Podcast](https://selfhosted.show/101?t=2731) for discussing our app. (Brent, we are excited to hear your thoughts on the new name from a marketing standpoint \ud83d\ude1c)\\n\\n- Last but not least, thank you to [The Self-Hosted Newsletter](https://selfh.st/newsletter/2023-07-07/) for mentioning our release.\\n\\nThank you all for your continued support!\\n\\nWe will keep you updated as the transition unfolds. In the meantime, head over to our [Discord](https://discord.gg/NEdNen2dSu) channel to celebrate and share your thoughts on the new name.\\n\\nStay tuned!"},{"id":"/2023/07/13/","metadata":{"permalink":"/blog/2023/07/13/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-13.md","source":"@site/blog/2023-07-13.md","title":"A Closer Look at GameVaults \'Source-Available\' Nature","description":"Hey everyone,","date":"2023-07-13T00:00:00.000Z","tags":[{"inline":true,"label":"source-available software","permalink":"/blog/tags/source-available-software"},{"inline":true,"label":"open-source","permalink":"/blog/tags/open-source"},{"inline":true,"label":"transparency","permalink":"/blog/tags/transparency"},{"inline":true,"label":"control","permalink":"/blog/tags/control"},{"inline":true,"label":"software development","permalink":"/blog/tags/software-development"},{"inline":true,"label":"code access","permalink":"/blog/tags/code-access"},{"inline":true,"label":"hybrid model","permalink":"/blog/tags/hybrid-model"},{"inline":true,"label":"software licensing","permalink":"/blog/tags/software-licensing"},{"inline":true,"label":"revenue generation","permalink":"/blog/tags/revenue-generation"},{"inline":true,"label":"user engagement","permalink":"/blog/tags/user-engagement"}],"readingTime":2.57,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","authors":["alfagun74"],"tags":["source-available software","open-source","transparency","control","software development","code access","hybrid model","software licensing","revenue generation","user engagement"]},"unlisted":false,"prevItem":{"title":"A New Name","permalink":"/blog/2023/07/15/"},"nextItem":{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/"}},"content":"Hey everyone,\\n\\ntoday i want to clarify why GameVault isn\'t considered \\"open-source\\" by definition. \x3c!-- truncate --\x3e\\n\\nYou see, GameVault is what we like to call [\\"source-available\\"](https://wikipedia.org/wiki/Source-available_software) software. This means that our code is open for you to explore and modify, but it doesn\'t fully meet all the criteria of being considered open-source. I want to take a moment to explain what open-source truly means and why we\'ve taken a slightly different approach.\\n\\nAccording to the widely recognized definitions, [\\"open-source\\"](https://wikipedia.org/wiki/Open-source_software) software, as one would think, not only provides access to the source code but also offers certain freedoms to its users. It allows them to use, modify, and distribute the software freely, even for commercial purposes.\\n\\nFor a self-hosted app like GameVault, we believe it\'s crucual to disclose the source code. We want you, our users, to have full transparency and control over the software you use on your servers. We don\'t want you to be unaware of what\'s happening behind the scenes, as is sometimes the case with closed-source applications like Plex, for example.\\n\\nNow, you may be wondering why we didn\'t make GameVault fully open-source. The answer lies in our desire to protect our code from unauthorized use and commercial exploitation. While we absolutely encourage you to copy, modify, and share our code for personal use, we want to prevent others from profiting off our hard work by selling our software without our consent.\\n\\nIt\'s important to acknowledge that maintaining and developing a software project requires resources. While we admire the open-source community and its valuable contributions, sustaining GameVault solely through donations or offering it for free indefinitely is not feasible. For instance, Jellyfin, a popular open-source app developed over a decade, generates only around $13,500 per year (according to their opencollective page). In contrast, Plex, a closed-source alternative, earns a significant $8.5 million annually. Our company\'s main goal is to keep the core functionality of GameVault free, but we also need to explore ways to generate revenue in order to support its future growth and improvement. We are currently considering monetizing additional convenience features for the Client Application in the future, although nothing has been finalized yet.\\n\\nWe genuinely appreciate your understanding. As a small business with just two members, we strive to provide you with a valuable product but cannot continue to do so as volunteers indefinitely. Sustaining losses in the long term would not be sustainable, especially considering our local tax obligations. We have families and commitments that cannot be neglected, and this project is not our primary job. Therefore, please understand that GameVault may not strictly align with the traditional definition of \\"open-source,\\" and we no longer characterize it as such. Our intention is to be transparent and present our perspective. Your understanding, support, and empathy mean a great deal to us.\\n\\nIf you have any thoughts or comments on this topic, we\'d be more than happy to hear from you. Feel free to share your feedback on our [Discord](https://discord.gg/NEdNen2dSu) server. We truly value your input and look forward to engaging with you there.\\n\\n`EDIT: Updated Application Name`"},{"id":"/2023/07/09/","metadata":{"permalink":"/blog/2023/07/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-09.md","source":"@site/blog/2023-07-09.md","title":"Battling Harassment and Trolls in Our App Community","description":"Hey folks,","date":"2023-07-09T00:00:00.000Z","tags":[{"inline":true,"label":"harassment","permalink":"/blog/tags/harassment"},{"inline":true,"label":"blackmail","permalink":"/blog/tags/blackmail"},{"inline":true,"label":"threats","permalink":"/blog/tags/threats"},{"inline":true,"label":"spam","permalink":"/blog/tags/spam"},{"inline":true,"label":"trolls","permalink":"/blog/tags/trolls"},{"inline":true,"label":"negative narratives","permalink":"/blog/tags/negative-narratives"},{"inline":true,"label":"safe environment","permalink":"/blog/tags/safe-environment"},{"inline":true,"label":"racist","permalink":"/blog/tags/racist"},{"inline":true,"label":"developers","permalink":"/blog/tags/developers"},{"inline":true,"label":"public","permalink":"/blog/tags/public"},{"inline":true,"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior"},{"inline":true,"label":"app","permalink":"/blog/tags/app"},{"inline":true,"label":"support","permalink":"/blog/tags/support"},{"inline":true,"label":"financial assistance","permalink":"/blog/tags/financial-assistance"},{"inline":true,"label":"motivation","permalink":"/blog/tags/motivation"},{"inline":true,"label":"GameVault app","permalink":"/blog/tags/game-vault-app"},{"inline":true,"label":"bugs","permalink":"/blog/tags/bugs"},{"inline":true,"label":"feature requests","permalink":"/blog/tags/feature-requests"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"success","permalink":"/blog/tags/success"},{"inline":true,"label":"engagement","permalink":"/blog/tags/engagement"}],"readingTime":1.955,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Battling Harassment and Trolls in Our App Community","authors":["alfagun74"],"tags":["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},"unlisted":false,"prevItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"},"nextItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}},"content":"Hey folks,\\n\\nWe have an important update to share with you all while our poll is in progress. It has come to our attention that a group of individuals has been engaging in harassing, blackmailing, and threatening behavior towards us. \x3c!-- truncate --\x3e\\n\\nIt began with spam on our Issue Trackers and [Discord](https://discord.gg/NEdNen2dSu) Server but this situation has escalated to the point where these individuals went so far as to search me up on LinkedIn and threaten to inform my employer with baseless accusations of racism because of trivial reasons like the branch name in our github project being \\"master\\". Moreover, we have received reports that these trolls have extended their actions directly to other members of this server, attempting to spread negative narratives and disrupting the community atmosphere.\\n\\nTo address this issue, we kindly request that you promptly report any encounters with these trolls to both [Discord](https://discord.gg/NEdNen2dSu) and our dedicated team of moderators. By doing so, we can take appropriate measures to handle the situation and maintain a safe environment for all.\\n\\nWe would like to emphasize that we are not racist individuals, but rather developers who decided to share our hard work with the community, hoping to bring joy and utility to everyone. Unfortunately, we did not anticipate encountering such creepy behavior when we made the project public. It has made us question whether it was the right decision to open up our work in the first place.\\n\\nIf you appreciate our efforts and would like to support us and the app, we humbly ask for your financial assistance. Even a small contribution of five bucks on [Kofi](https://ko-fi.com/phalcode) would go a long way in helping us maintain our motivation and dedication. Alternatively, if monetary support isn\'t possible, we would be incredibly grateful if you could share kind words about how the GameVault app has positively impacted your life in the #chat channel. Your encouragement means the world to us. \ud83e\udd70\\n\\nIn addition, we encourage you to continue reporting any bugs you encounter and submitting feature requests in the respective GitHub trackers. With your valuable input, we can continue improving the app and making it even better.\\n\\nRemember, the success of this project relies on your support and engagement. Let\'s stand together against these trolls and ensure a positive and inclusive community experience. Thank you for your attention and understanding."},{"id":"/2023/07/08/","metadata":{"permalink":"/blog/2023/07/08/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-08.md","source":"@site/blog/2023-07-08.md","title":"Choosing a New, Family-Friendly Name for this project!","description":"Hello, everyone!","date":"2023-07-08T00:00:00.000Z","tags":[{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"gaming platform","permalink":"/blog/tags/gaming-platform"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"new name","permalink":"/blog/tags/new-name"},{"inline":true,"label":"family-friendly","permalink":"/blog/tags/family-friendly"},{"inline":true,"label":"poll","permalink":"/blog/tags/poll"},{"inline":true,"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"inclusivity","permalink":"/blog/tags/inclusivity"},{"inline":true,"label":"user participation","permalink":"/blog/tags/user-participation"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"decision-making","permalink":"/blog/tags/decision-making"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"platform values","permalink":"/blog/tags/platform-values"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"future development","permalink":"/blog/tags/future-development"}],"readingTime":1.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Choosing a New, Family-Friendly Name for this project!","authors":["alfagun74"],"tags":["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},"unlisted":false,"prevItem":{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/"},"nextItem":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","permalink":"/blog/2023/07/01/"}},"content":"Hello, everyone!\\n\\nWe have an important announcement to share about our [source-available](https://en.wikipedia.org/wiki/Source-available_software) gaming platform, project. We have listened to your feedback and concerns, and now we need your help in choosing a new, family-friendly name that better reflects our platform\'s values. \x3c!-- truncate --\x3e To make this decision-making process more convenient, we have created a poll with 100 potential names, suggested by you on our [Discord](https://discord.gg/NEdNen2dSu), some of which were generated by AI. Your participation in shaping the future of our platform is greatly appreciated.\\n\\nWe kindly request your support in selecting a new name for our gaming platform. The poll offers a variety of names, and we ask that you choose at least 10 names (10%) that appeal to you. By gathering diverse input and minimizing bias, we aim to create an inclusive and enjoyable experience for all users. We apologize if the current name has caused any discomfort, and we are committed to creating a welcoming environment for gamers.\\n\\nTo cast your votes and contribute to the selection of a new, family-friendly name for our [source-available](https://en.wikipedia.org/wiki/Source-available_software) gaming platform, please click on the link provided at the end of this post. Your voice matters, and together, we can find a name that truly represents our app\'s essence. The results will be announced on this blog around July 15, 2023.\\n\\nWe sincerely appreciate your support and encourage you to stay tuned for updates as we continue to improve our platform based on your valuable feedback.\\n\\nLink to the poll: [https://forms.gle/cYsURG6BqMXcxE3B8](https://forms.gle/cYsURG6BqMXcxE3B8)\\n\\nHappy voting!"},{"id":"/2023/07/01/","metadata":{"permalink":"/blog/2023/07/01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-01.md","source":"@site/blog/2023-07-01.md","title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","description":"Hey Guys,","date":"2023-07-01T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"alternative","permalink":"/blog/tags/alternative"},{"inline":true,"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms"},{"inline":true,"label":"DRM-free games","permalink":"/blog/tags/drm-free-games"},{"inline":true,"label":"file server","permalink":"/blog/tags/file-server"},{"inline":true,"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"RAWG API","permalink":"/blog/tags/rawg-api"},{"inline":true,"label":"health monitoring","permalink":"/blog/tags/health-monitoring"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"Discord server","permalink":"/blog/tags/discord-server"},{"inline":true,"label":"Reddit forum","permalink":"/blog/tags/reddit-forum"},{"inline":true,"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum"}],"readingTime":1.78,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","authors":["alfagun74"],"tags":["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},"unlisted":false,"prevItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}},"content":"Hey Guys,\\n\\nOur team has been working tirelessly for the past year on creating GameVault, the source-available, self-hosted, and free alternative to traditional cloud-based game platforms like Steam, Origin, Epic Games, and GoG. We are excited to share that GameVault is now available for everyone to use, and we are delighted to disclose it to the community. \x3c!-- truncate --\x3e\\n\\nWith GameVault, you can play and track games together with your friends on a shared file server, free from any restrictions that traditional game platforms may impose. We have designed it to work with DRM-free games, providing a unique solution for those who want a more flexible and open approach to gaming. Think of it like Jellyfin, but for Videogames.\\n\\nGameVault offers a self-hosted approach that gives you complete control over your gaming experience. The platform enables you to browse your server\'s game collection, securely download games, launch and play them, and even track your playtimes and progress - regardless of whether the server is offline. Additionally, you can compare stats and play states with other users on the server.\\n\\nOur server features offer automatic indexing of games on the file system into a database, enrichment of games with metadata like tags and genres using RAWG API, multi-user authentication, and configurable logging. We have also implemented health monitoring, full-text search, filters, sorting, pagination, and a fully documented API. The GameVault platform is highly configurable to suit your needs.\\n\\nWe are thrilled that you have found us, and we invite you to try GameVault today. We would be grateful for any contributions, feedback, bug reports, and feature requests you might have. You can also support us by donating using the links provided on our website. If you have any questions or would like to connect with other GameVault users, please join our [Discord](https://discord.gg/NEdNen2dSu), Reddit and Lemmy communities - links to which are available in the footer.\\n\\nWe are passionate about creating a gaming experience that is more open, flexible, and enjoyable for everyone. We hope you will join us on this journey and experience the benefits of a truly source-available alternative to traditional game platforms with GameVault."}]}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5749],{7735:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/2024/10/20/","metadata":{"permalink":"/blog/2024/10/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-10-20.md","source":"@site/blog/2024-10-20.md","title":"An update so major, we could have built the product from scratch.","description":"Hello, GameVault Community!","date":"2024-10-20T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Client Update","permalink":"/blog/tags/client-update"},{"inline":true,"label":"Server Update","permalink":"/blog/tags/server-update"},{"inline":true,"label":"metadata framework","permalink":"/blog/tags/metadata-framework"},{"inline":true,"label":"plugin system","permalink":"/blog/tags/plugin-system"},{"inline":true,"label":"parental control","permalink":"/blog/tags/parental-control"},{"inline":true,"label":"age restrictions","permalink":"/blog/tags/age-restrictions"},{"inline":true,"label":"theme","permalink":"/blog/tags/theme"},{"inline":true,"label":"app optimization","permalink":"/blog/tags/app-optimization"},{"inline":true,"label":"analytics","permalink":"/blog/tags/analytics"},{"inline":true,"label":"notes","permalink":"/blog/tags/notes"},{"inline":true,"label":"community management","permalink":"/blog/tags/community-management"}],"readingTime":2.515,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"An update so major, we could have built the product from scratch.","authors":["alfagun74"],"tags":["GameVault","Client Update","Server Update","metadata framework","plugin system","parental control","age restrictions","theme","app optimization","analytics","notes","community management"]},"unlisted":false,"nextItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"}},"content":"**Hello, GameVault Community!**\\n\\nAfter six months of hard work, we\u2019re beyond excited to unveil our biggest update yet: **GameVault Client v1.12** and **GameVault Server v13**! This release is so massive, it feels like we could\u2019ve built the product from scratch\u2014there\u2019s that much new ground covered. \x3c!-- truncate --\x3e\\n\\n### What\u2019s New?\\n\\nWe\u2019ve introduced some game-changing improvements. First and foremost, we\u2019ve moved away from unreliable third-party tools like RAWG and Google Image Scrapers for fetching video game metadata. Instead of just swapping one provider for another and making us dependant again, we\u2019ve built something much better: a brand-new **plugin system** on the backend, complete with an official partnership with **IGDB/Twitch**.\\n\\nThe new plugin framework is incredibly flexible, allowing users to write their own metadata provider plugins. It supports an unlimited number of providers, prioritizes data effectively, and even fills in any gaps intelligently. And the cherry on top? Users now have full control over metadata\u2014if you want to tweak or edit a piece of info, you can do so without changing the source data. Your custom edits are saved separately, giving you full freedom.\\n\\nWe\u2019ve been rigorously testing this system for 2\u20133 months, running an early access phase for about a month. While we\u2019ve optimized it as much as possible, we ask for your patience if any bugs pop up\u2014mastillke sure to back up before migrating!\\n\\n### Major New Features\\n\\nHere\u2019s a quick rundown of some other incredible additions in this update:\\n\\n- **Parental Controls & Age Restrictions:** Now, families can manage access based on age-appropriate content, giving more control over what\u2019s playable and viewable for children.\\n- **Built-in Media Player:** You can now watch trailers and gameplay videos directly in GameVault.\\n- **UI Overhaul:** We\u2019ve refreshed the Game, Community, and Admin Tabs, along with a redesigned App Bar for a sleeker look.\\n- **Halloween Theme:** Just in time for spooky season! GameVault+ users can enjoy a themed Halloween skin.\\n- **Convenience Features:** We\u2019ve added default arguments and launch/install executables to streamline app functionality.\\n- **Markdown Support:** Both Notes and Server News now support markdown, making formatting a breeze and improving readability.\\n\\n### Critical Update Info\\n\\nBefore updating, please ensure compatibility between clients and servers:\\n\\n- **Client v1.12** is required for servers running **v13 or above**.\\n- Older clients (**before v1.12**) won\u2019t work with server running on **Version 13 or above**.\\n\\nFor a smooth update and a guide on how to use all these new features, check out the detailed [migration instructions](https://github.com/Phalcode/gamevault-backend/blob/master/CHANGELOG.md#1300) in the server changelogs. As always, if you hit any snags, feel free to reach out to us on [Discord](https://discord.gg/NEdNen2dSu).\\n\\n### Support Us\\n\\nIf you\u2019d like to support our development and help us keep most of GameVault\u2019s features free, consider [subscribing to **GameVault+**](https://gamevau.lt/gamevault-plus) or making [a one-time donation](https://phalco.de/support-us). Although GameVault+ at the time only offers a limited set premium features, your support helps us continue making the app accessible to all.\\n\\nThank you all for supporting and using our passion project! We hope you enjoy the latest features and enhancements we\'ve added."},{"id":"/2024/05/07/","metadata":{"permalink":"/blog/2024/05/07/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-05-07.md","source":"@site/blog/2024-05-07.md","title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","description":"Hey everyone!","date":"2024-05-07T00:00:00.000Z","tags":[{"inline":true,"label":"game","permalink":"/blog/tags/game"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"database","permalink":"/blog/tags/database"},{"inline":true,"label":"videogame","permalink":"/blog/tags/videogame"},{"inline":true,"label":"RAWG","permalink":"/blog/tags/rawg"},{"inline":true,"label":"IGDB","permalink":"/blog/tags/igdb"},{"inline":true,"label":"twitch.tv","permalink":"/blog/tags/twitch-tv"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"partnership","permalink":"/blog/tags/partnership"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"solution","permalink":"/blog/tags/solution"},{"inline":true,"label":"Steam","permalink":"/blog/tags/steam"},{"inline":true,"label":"backend","permalink":"/blog/tags/backend"},{"inline":true,"label":"update","permalink":"/blog/tags/update"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"easter egg","permalink":"/blog/tags/easter-egg"}],"readingTime":2.525,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","authors":["alfagun74"],"tags":["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},"unlisted":false,"prevItem":{"title":"An update so major, we could have built the product from scratch.","permalink":"/blog/2024/10/20/"},"nextItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"}},"content":"Hey everyone!\\n\\nIn our last post we mentioned the challenges we\'ve been facing with the videogame metadata database we\'ve been using, [rawg.io](https://rawg.io/). Unfortunately, it\'s become an unmaintained abandonware, causing frequent downtime and issues like incorrect search results and registration problems. \x3c!-- truncate --\x3e The situation peaked on May 5th when the service went down completely for a day.\\n\\n## GameVault\'s new metadata provider strategy\\n\\nTo address these issues, we\'re making significant changes to GameVault\'s metadata system. Our goal is to make GameVault metadata provider agnostic, allowing users to seamlessly plug in their preferred metadata provider.\\n\\nWe\'re also excited to announce our official partnership with IGDB (twitch.tv), a trusted video game database. Going forward, GameVault will primarily use IGDB\'s APIs out of the box.\\n\\nMore details on our plans can be found in this [GitHub ticket](https://github.com/Phalcode/gamevault-backend/issues/258). We also plan to continue supporting the use of your own API keys and other vendors.\\n\\nHowever, as decided in our recent poll, we will be removing all support for RAWG.\\n\\n## Temporary solution: Implementing a RAWG replacement\\n\\nHowever, implementing these changes will take time, and we are both currently busy with work commitments and travel plans. So what happens if RAWG suddenly stops working while we\'re away? To address this concern, [Toylerrr](https://github.com/Toylerrr), one of our most valuable community members, had a great idea. He began developing a solution that would be a drop-in replacement for RAWG. An application that mimicked the behavior of RAWG, but fetched data from Steam instead. All you have to do is replace the url in the `RAWG_API_URL` environmental variable.\\n\\nWe loved the idea and built on it. Introducing [rawg-to-steam-redirect](https://github.com/Phalcode/rawg-to-steam-redirect).\\n\\nThe link above explains how it works and how you can use it today.\\n\\nWhat we liked most about it is that it required minimal backend changes to integrate. We have already tested this solution on our 667 games server and it works great. The quality of box art for example is much better. One drawback is that Steam does not have a lot of tags in its API.\\n\\nWhile `https://api.rawg.io/api` will remain the default `RAWG_API_URL` for now, you can switch between RAWG and the new solution at any time. Just make sure your GameVault backend is updated to at least v12.1.0.\\n\\n## Exciting new features\\n\\nIn addition to these changes, we\'re excited to introduce you to some new features that were recently released:\\n\\n- **\ud83d\udd16 Bookmarking Video Games:** You can now bookmark your favorite games within GameVault.\\n- **\u23ef\ufe0f Download Management:** GameVault now supports pausing, auto-resuming, and resuming downloads.\\n- **\ud83d\udd12 Encrypted Archives:** GameVault now supports password protected archives.\\n\\nWe hope these updates will make your experience with GameVault even better as we move through this transition period.\\n\\n## Supporting GameVault\\n\\nFinally, we want to thank all of you for making all of this possible. If you have not already done so, please consider upgrading to GameVault+ to flex with animated profile pictures on your server. We would really appreciate it. Bet you can\'t find the GameVault+ easter egg though... \ud83d\ude09\\n\\nWith love,\\n\\nPhalcode"},{"id":"/2024/04/14/","metadata":{"permalink":"/blog/2024/04/14/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-14.md","source":"@site/blog/2024-04-14.md","title":"GameVault+ out now","description":"Hey everyone!","date":"2024-04-14T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"DRM-free","permalink":"/blog/tags/drm-free"},{"inline":true,"label":"video games","permalink":"/blog/tags/video-games"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription","permalink":"/blog/tags/subscription"},{"inline":true,"label":"community-driven","permalink":"/blog/tags/community-driven"},{"inline":true,"label":"updates","permalink":"/blog/tags/updates"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"early access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"release","permalink":"/blog/tags/release"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"sustainability","permalink":"/blog/tags/sustainability"},{"inline":true,"label":"partnerships","permalink":"/blog/tags/partnerships"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"development","permalink":"/blog/tags/development"}],"readingTime":1.18,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault+ out now","authors":["alfagun74"],"tags":["gaming","self-hosted","platform","DRM-free","video games","GameVault","GameVault+","subscription","community-driven","updates","announcement","early access","release","features","sustainability","partnerships","Discord","feedback","improvement","development"]},"unlisted":false,"prevItem":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","permalink":"/blog/2024/05/07/"},"nextItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"}},"content":"Hey everyone!\\n\\nWe\'re thrilled to announce that the early access phase of GameVault+ has concluded, and we\'re officially launching it today! It\'s been an incredible journey from the inception of GameVault to where we are now, and we couldn\'t have done it without your amazing support.\x3c!-- truncate --\x3e\\n\\nGameVault+ is our way of saying thank you to our dedicated supporters while also ensuring the sustainability of our platform. For a small monthly fee, you\'ll gain access to premium features designed to enhance your gaming experience within GameVault. We\'re starting with features like animated profile pictures, custom themes, and activation of the GameVault Client API, with more exciting additions planned for the future.\\n\\nBut our work doesn\'t stop here. We\'re committed to refining GameVault+ based on your feedback, as well as addressing key areas of improvement in the platform. This includes exploring partnerships with reputable video game databases to enhance our data offerings and refactoring our client application for optimal performance.\\n\\nAnd most importantly, we want you, our community, to have a say in the future direction of GameVault. That\'s why we\'re opening up the floor for feature suggestions through our Discord channel. Your input will help shape the next big updates to GameVault.\\n\\nThank you all for your support and enthusiasm. We\'re excited to continue this journey with you and to make gaming even more enjoyable for everyone. Stay tuned for more updates, and happy gaming!"},{"id":"/2024/04/01/2024-04-01/","metadata":{"permalink":"/blog/2024/04/01/2024-04-01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-04-01/2024-04-01.md","source":"@site/blog/2024-04-01/2024-04-01.md","title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","description":"Hey Everyone!","date":"2024-04-01T00:00:00.000Z","tags":[{"inline":true,"label":"April Fools","permalink":"/blog/tags/april-fools"}],"readingTime":1.605,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","authors":["alfagun74"],"tags":["April Fools"]},"unlisted":false,"prevItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"},"nextItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"}},"content":"Hey Everyone!\\n\\nThe moment you\'ve been waiting for is finally here. We\'ve been working hard on it for months and are thrilled to announce that GameVault Client Application is **now available on Windows Phone 7**, powered by **Microsoft Silverlight**!\x3c!-- truncate --\x3e\\n\\n![Windows Phone](winphone.png)\\n\\nThe Current PC-Version of GameVault will be discontinued soon and will no longer be available to download from the Microsoft Store, as the technology is too new and not well supported yet. We needed a battle-tested framework to ensure compatibility, so we decided to switch to Windows Phone 7 and Silverlight. Also, the mobile platform just has massive market share, compared to PC.\\n\\nWe understand the excitement and anticipation surrounding this release, and we\'re just as eager as you are to see how this integration will enhance your experience.\\n\\nWith GameVault on your Windows Phone 7 device, you can carry your favorite games with you wherever you go. Whether you\'re battling fierce foes, exploring vast virtual worlds, or simply passing the time with a quick puzzle game, GameVault ensures that the thrill of gaming is always at your fingertips.\\n\\nThanks to the seamless integration with Microsoft Silverlight, navigating through your game library has never been smoother or more intuitive. The Metro Live Tiles add a touch of elegance to the user interface, making it a joy to browse through your collection and discover new games.\\n\\nAnd the best part? This is just the beginning. Our team is already hard at work on further enhancements and features, including the highly anticipated Holodeck edition of GameVault aswell as the new integrated \\"Bird Feeding Timer\\" feature, that automatically warns you when your pets are about to starve.\\n\\nWe\'re incredibly excited to embark on this journey with you and to continue pushing the boundaries of innovation. So what are you waiting for? Head over to the Windows Phone Store and migrate today to start your gaming adventure!\\n\\nHappy gaming... and April Fools!"},{"id":"/2024/03/28/","metadata":{"permalink":"/blog/2024/03/28/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-03-28.md","source":"@site/blog/2024-03-28.md","title":"Announcing GameVault+ (coming soon)","description":"Hey Everyone!","date":"2024-03-28T00:00:00.000Z","tags":[{"inline":true,"label":"startup","permalink":"/blog/tags/startup"},{"inline":true,"label":"software","permalink":"/blog/tags/software"},{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"subscription model","permalink":"/blog/tags/subscription-model"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"}],"readingTime":3.725,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Announcing GameVault+ (coming soon)","authors":["alfagun74"],"tags":["startup","software","gaming","GameVault","subscription model","development","community","announcement"]},"unlisted":false,"prevItem":{"title":"GameVault Client is now available on Windows Phone 7 based on Microsoft Silverlight!","permalink":"/blog/2024/04/01/2024-04-01/"},"nextItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"}},"content":"Hey Everyone!\\n\\nIt feels like it\'s been ages since we last caught up regarding the development of [GameVault (the self-hostable platform for drm-free videogames)](https://gamevau.lt), but trust me, the silence from our end doesn\'t mean we\'ve been slacking off. In fact,quite the opposite has been happening behind the scenes. \x3c!-- truncate --\x3e \\n\\nWhen my friend and I first launched this application, it was born out of a simple need for a solution to a problem we thought was very particular and only for ourselves. Having a steam-like platform for game files lying on my home server.\\n\\nWe never imagined it would resonate with others or find its own place in the market. Frankly, we thought it might end up just another forgotten repository on GitHub, gathering virtual dust with no one paying it any mind.\\n\\nBut boy, were we wrong. The response to our app was unexpectedly large and overwhelming. Thousands of people are using GameVault today, and it seems there\'s quite a demand out there for the exact product we\'ve been building.\\n\\nWe\u2019re a small indie team of two and despite juggling multiple jobs, we\'ve poured our hearts and souls into this project during our spare times, striving to offer a self-hosted alternative to the gaming platforms out there. And while we\'ve received some generous donations (_shoutout to our two loyal monthly donors btw \u2013 you know who you are, and we\'re endlessly grateful!_), it\'s clear that relying solely on sporadic tips isn\'t sustainable for the long term and we need financial support to maintain our services and justify our time investment towards our families.\\n\\nSo, it\'s time for a slight change. We\'re thrilled to announce the upcoming release of a new version of our client application, complete with an **optional** subscription model we\'re calling...\\n\\n## [GameVault+](https://gamevau.lt/docs/gamevault-plus/introduction)\\n\\n## What is GameVault+?\\n\\nFirst, to clear some of the confusion:\\n\\n**No, this is not some shady scammy \\"We\'re going enterprise\\" rugpull**.\\nThe core of GameVaults upcoming features and the features you enjoyed until now will always remain free. Additionally the system is [designed to be easily bypassed if you can\'t or dont want to afford it.](https://gamevau.lt/docs/gamevault-plus/introduction/#what-if-i-cant-afford-gamevault)\\n\\n[It was long planned on our board and well discussed within our community](https://github.com/Phalcode/gamevault-app/issues/151). Think of [GameVault+](https://gamevau.lt/docs/gamevault-plus/introduction) as our way of saying \\"thank you\\" to our supporters and to motivate them to support us regularly. To be more specific, it\'s us giving back some goodie-features that are not necessarily needed to use GameVault back to our supporters, while they help us keep the lights on here at Phalcode.\\n\\nWith GameVault+, you\'ll gain access to premium nice-to-have features designed to enhance your GameVault experience, all for a small monthly fee of \u20ac4,99 monthly or \u20ac49.90 anually.\\n\\nCurrently, these features include:\\n\\n- Uploading animated profile pictures\\n- Applying Custom Themes\\n- Activation of the GameVault Client API (CLI, URI, and NamedPipe Interfaces Used for client integrations with 3rd party tools like Playnite)\\n\\nBut there are more to come! We will be enhancing this offering with more features, whenever we see room for it, as GameVault+ subscribers are the ones, who keep this project alive.\\n\\nAll details and a Q&A are on the [GameVault+ page](https://gamevau.lt/docs/gamevault-plus/introduction).\\n\\n**We\'ll be rolling out this new product today to our early access users first** to get the product and the infrastructure around it tested, tweaking and refining it based on your feedback before making it available to everyone. It\'s an exciting new chapter for us, and we can\'t wait to have you along for the ride.\\n\\n## So what\'s next?\\n\\nWe will polish the rough edges of GameVault+ and bring it to life in the next few weeks, hopefully. You will probably already see some documentation on this website for it. Keep in mind, this is all a work in progress, and we will announce the final release soon.\\n\\nAfter that, we will need to urgently find a solution to our heavy reliance on the [degrading and unmaintained RAWG Database](https://discord.com/channels/1100920639667306496/1134496308846137404/1217726870959820861). We are already in contact for potential partnerships with Video-Game Databases.\\n\\nFinally, we will need to do some refactoring of our client application\'s architecture.\\n\\nBut stay tuned because once all of this is done, the Next Big Feature we\'ll be focusing on will be open for **the community to decide** in [our #polls channel on Discord](https://discord.gg/NEdNen2dSu). So make sure to join \\"The Council\\" to get notified and vote on your most desired feature.\\n\\nThank you all for supporting us and looking forward to seeing you all on our next updates!"},{"id":"/2023/12/09/","metadata":{"permalink":"/blog/2023/12/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-12-09.md","source":"@site/blog/2023-12-09.md","title":"Join the GameVault Early-Access Program Now!","description":"Hey, Guys!","date":"2023-12-09T00:00:00.000Z","tags":[{"inline":true,"label":"Gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"Early Access","permalink":"/blog/tags/early-access"},{"inline":true,"label":"UI Update","permalink":"/blog/tags/ui-update"},{"inline":true,"label":"Beta Testing","permalink":"/blog/tags/beta-testing"},{"inline":true,"label":"Community Feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"Exclusive Preview","permalink":"/blog/tags/exclusive-preview"},{"inline":true,"label":"Microsoft Store","permalink":"/blog/tags/microsoft-store"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"Gaming Servers","permalink":"/blog/tags/gaming-servers"}],"readingTime":1.135,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Join the GameVault Early-Access Program Now!","authors":["alfagun74"],"tags":["Gaming","GameVault","Early Access","UI Update","Beta Testing","Community Feedback","Exclusive Preview","Microsoft Store","Discord","Gaming Servers"]},"unlisted":false,"prevItem":{"title":"Announcing GameVault+ (coming soon)","permalink":"/blog/2024/03/28/"},"nextItem":{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/"}},"content":"Hey, Guys!\\n\\nFor the upcoming large UI update of GameVault, we\'re launching a brand new GameVault Early-Access Program, and we want **YOU** to be a part of it!\x3c!-- truncate --\x3e\\n\\n## What\'s the Early-Access Program?\\n\\nEarly-Access is your golden ticket to test-drive upcoming GameVault updates before anyone else. You\'ll be part of an exclusive group and get a sneak peek into the latest features, but here\'s the deal \u2013 it might not be as stable as our regular releases and you need to interact with us. Your feedback will help us fine-tune everything before the big release for everyone else.\\n\\n## How to Join\\n\\n:clipboard: Complete the [Application Form](https://forms.gle/RQvEGfWeUFPBCUaG6) \\n:date: The first early-access phase kicks off on December 17 and lasts for one week.\\n\\n## Prerequisites\\n\\n:speech_balloon: Active participation in the designated Discord channel. \\n:video_game: GameVault installed from the Microsoft Store with a Microsoft Account logged in. If not, grab it [here](https://www.microsoft.com/store/apps/9PCKDV76GL75). \\n:rocket: A GameVault Server running the **phalcode/gamevault-backend:early-access** image. (Only run this if you are accepted as a Tester as it could break things!)\\n\\n### Important Note\\n\\n- There are only a limited number of slots in the Early-Access Program. Supporters and Trusted Members are prioritized.\\n- If you\'re accepted and later found not meeting the requirements, you might be removed from future testing and the next applicant on our list gets the opportunity.\\n\\n[Apply here!](https://forms.gle/RQvEGfWeUFPBCUaG6)"},{"id":"/2023/11/20/","metadata":{"permalink":"/blog/2023/11/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-11-20.md","source":"@site/blog/2023-11-20.md","title":"A Look Back and a Glimpse Forward","description":"Hello,","date":"2023-11-20T00:00:00.000Z","tags":[{"inline":true,"label":"Game Development","permalink":"/blog/tags/game-development"},{"inline":true,"label":"Software Updates","permalink":"/blog/tags/software-updates"},{"inline":true,"label":"Gaming Community","permalink":"/blog/tags/gaming-community"},{"inline":true,"label":"UI Redesign","permalink":"/blog/tags/ui-redesign"},{"inline":true,"label":"Development Milestones","permalink":"/blog/tags/development-milestones"},{"inline":true,"label":"Tech Progress","permalink":"/blog/tags/tech-progress"},{"inline":true,"label":"Future Features","permalink":"/blog/tags/future-features"},{"inline":true,"label":"GameVault Journey","permalink":"/blog/tags/game-vault-journey"},{"inline":true,"label":"Coding Chronicle","permalink":"/blog/tags/coding-chronicle"},{"inline":true,"label":"November Update","permalink":"/blog/tags/november-update"}],"readingTime":2.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A Look Back and a Glimpse Forward","authors":["alfagun74"],"tags":["Game Development","Software Updates","Gaming Community","UI Redesign","Development Milestones","Tech Progress","Future Features","GameVault Journey","Coding Chronicle","November Update"]},"unlisted":false,"prevItem":{"title":"Join the GameVault Early-Access Program Now!","permalink":"/blog/2023/12/09/"},"nextItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"}},"content":"Hello,\\n\\nIt\'s been a while since we caught up here, but if you\'ve been following the action on [Discord](https://discord.gg/NEdNen2dSu), you\'re up to speed. Nevertheless, this blog remains your spot for the key updates and announements.\x3c!-- truncate --\x3e\\n\\nLet\'s dive into what\'s been happening with GameVault since release and what\'s on the horizon. We\'ve hit version 9 on the backend and 1.7 on the frontend, showcasing our commitment to continuous improvement.\\n\\nAlongside the usual optimizations and bug fixes, we\'ve been paying a lot of attention to your feature requests and implemented a bunch of them.\\n\\nHere\'s the highlight reel:\\n\\n- Auto Extraction and Installation of Videogames\\n- Uninstalling Games through GameVault\\n- Uploading Images\\n- Support for more Archive Formats\\n- Bandwidth Control Features\\n- Database Backups & Restorations\\n- Crash Reporting\\n- Random Game Finder\\n\\nSo, what\'s cooking now? We asked for your top three desired features recently, and here are the results:\\n\\n1. UI Redesign for the Library and Installations Tab\\n2. Support for ROMS and Emulators\\n3. Support for extra files like Soundtracks, Mods, etc.\\n\\nBy the way, if you want to take part in polls like this in the future aswell, make sure to become a council member on [Discord](https://discord.gg/NEdNen2dSu)!\\n\\nRight now we\'re knee-deep in redesigning the Library, the heart of our application. Big changes are on the way, waving goodbye to the installations tab and ushering in a sleeker UI for Library, Game View, and Game Settings.\\n\\nHere are some sneak peeks and mockups: (still work in progress):\\n\\n1. Library (Mockup)\\n ![Filters](/img/blog/2023-11-19/filters.png)\\n ![Empty States](/img/blog/2023-11-19/emptystates.png)\\n2. Library (current implementation)\\n ![Library](/img/blog/2023-11-19/library.png)\\n3. Game (Mockup)\\n ![Game View](/img/blog/2023-11-19/game.png)\\n4. Game Settings (Mockup)\\n ![Game Settings](/img/blog/2023-11-19/settings.png)\\n\\nRemember, these are teasers. Anything can look different once it ships. There\'s a lot of work left, and we\'re on it. To be technical here: Most of these modern controls require us to rewrite WPF Controls from the core. On the backend, we\'re not slacking either \u2013 tons of end-to-end tests are being written to ensure our app\'s reliability.\\n\\nExcited about the new UI or got something to say? Head over to [Discord](https://discord.gg/NEdNen2dSu) and spill the beans!\\n\\nWe\'re eager to wrap up these tasks and ship the update out to you guys.\\n\\nWe also wanted to mention we\'ve already crossed 2000 GameVault users with a growing engaged [Discord](https://discord.gg/NEdNen2dSu) community of 350 members!\\n\\nAnd your donations help keeping the lights on, though we\'re not rolling in dough just yet. Every penny counts, and we\'re truly grateful. Thanks a lot. \u2764\ufe0f\\n\\nHelp us promote GameVault among fellow self-hosters. Your efforts could inspire a bored developer to join and contribute to our project!\\n\\nStay tuned for the UI update \u2013 we\'ll be back in touch soon.\\n\\nUntil then, happy gaming! \ud83c\udfae"},{"id":"/2023/07/29/","metadata":{"permalink":"/blog/2023/07/29/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-29.md","source":"@site/blog/2023-07-29.md","title":"Please help us prioritize!","description":"Hello everyone!","date":"2023-07-29T00:00:00.000Z","tags":[{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"development","permalink":"/blog/tags/development"},{"inline":true,"label":"roadmap","permalink":"/blog/tags/roadmap"},{"inline":true,"label":"collaboration","permalink":"/blog/tags/collaboration"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"GitHub","permalink":"/blog/tags/git-hub"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"platform","permalink":"/blog/tags/platform"},{"inline":true,"label":"Kanban Board","permalink":"/blog/tags/kanban-board"},{"inline":true,"label":"Discord","permalink":"/blog/tags/discord"},{"inline":true,"label":"Council Member","permalink":"/blog/tags/council-member"},{"inline":true,"label":"polls","permalink":"/blog/tags/polls"},{"inline":true,"label":"gaming experience","permalink":"/blog/tags/gaming-experience"}],"readingTime":1.995,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Please help us prioritize!","authors":["alfagun74"],"tags":["community","GameVault","development","roadmap","collaboration","feedback","GitHub","voting","features","platform","Kanban Board","Discord","Council Member","polls","gaming experience"]},"unlisted":false,"prevItem":{"title":"A Look Back and a Glimpse Forward","permalink":"/blog/2023/11/20/"},"nextItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"}},"content":"Hello everyone!\\n\\nWe hope you\'re all doing well. We wanted to take a moment to express our heartfelt gratitude for the flood of feature requests and bug reports that have been pouring into our issue trackers. \x3c!-- truncate --\x3e Your enthusiasm and dedication to making GameVault even better are truly inspiring to us.\\n\\nAs many of you may already know, GameVault is a passion project for us, and while we are mostly convinced by your fantastic ideas, it may take some time for us to implement them. Our team meetings happen in our free time, and although we genuinely want to incorporate your suggestions into our roadmap, we are limited by the time and capacity we can dedicate to the project. Moreover, we want to ensure that the features we develop are refined, polished, and also the most desired in the users\' opinions, which adds to the timeline.\\n\\nWe believe that collaboration with our incredible community is the key to success, and that\'s why we want to introduce you to our Roadmap. It displays all new issues, planned tasks we want to work on, and all the ongoing work in a well-organized Kanban Board. [You can find it right here.](https://github.com/orgs/Phalcode/projects/4)\\n\\nTo ensure that GameVault\'s development aligns better with your needs, we kindly request your active participation. By voting on GitHub with a Thumbs Up or a Thumbs Down on new and planned issues, you can help us prioritize them effectively. We value your opinion: What features do you feel are most crucial? What aspects of the platform do you find most bothersome? What issues do you see as unnecessary or bloated? Your input will mainly shape the direction we take.\\n\\nIf you\'re eager to go the extra mile and actively contribute to shaping GameVault further, we invite you to [join our Discord community](https://discord.gg/NEdNen2dSu) and becoming a \\"Council Member\\". By becoming a \\"Council Member\\" and enabling Poll Notifications under \\"#Channels & Roles\\", you will have a direct say in the future of GameVault because you will get notifications about opinion polls we run from time to time.\\n\\nWe cannot stress enough how much we appreciate your involvement in our endeavor to create the ultimate gaming experience for all of you. Your passion and feedback are invaluable, and we are committed to making GameVault the best it can be, together.\\n\\nThank you for being part of this amazing journey with us!"},{"id":"/2023/07/24/","metadata":{"permalink":"/blog/2023/07/24/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-24.md","source":"@site/blog/2023-07-24.md","title":"Celebrating 600+ Installations and announcing the upcoming big feature","description":"Hey everyone,","date":"2023-07-24T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone"},{"inline":true,"label":"official installations","permalink":"/blog/tags/official-installations"},{"inline":true,"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth"},{"inline":true,"label":"gratitude","permalink":"/blog/tags/gratitude"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault"},{"inline":true,"label":"upcoming update","permalink":"/blog/tags/upcoming-update"},{"inline":true,"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline"},{"inline":true,"label":"simplifying game installation","permalink":"/blog/tags/simplifying-game-installation"},{"inline":true,"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue"},{"inline":true,"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role"},{"inline":true,"label":"Lemmy community launch","permalink":"/blog/tags/lemmy-community-launch"},{"inline":true,"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"support request","permalink":"/blog/tags/support-request"},{"inline":true,"label":"continued support","permalink":"/blog/tags/continued-support"},{"inline":true,"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","authors":["alfagun74"],"tags":["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},"unlisted":false,"prevItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"},"nextItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"}},"content":"Hey everyone,\\n\\nWe\'re excited to share some great news with you all! GameVault has reached a small milestone with over 600 official installations of our GameVault Client Application. \x3c!-- truncate --\x3e What\'s even more amazing is that around 200 dedicated users, a third of these installations, have joined our [Discord](https://discord.gg/NEdNen2dSu) community to connect, chat, and share their experiences.\\n\\nWe want to express our immense gratitude for your incredible support, feedback, and love for GameVault. Your ongoing encouragement inspires us to push boundaries and enhance your gaming experience. We\'re thrilled to announce that an awesome update is being worked on right now - the highly anticipated release of GameVault\'s Installation Pipeline!\\n\\n#### GameVault\'s Installation Pipeline\\n\\nThe Installation Pipeline is designed to revolutionize how you install and manage your games. It was suggested by members on our [Discord server](https://discord.gg/NEdNen2dSu). We understand the challenges of navigating through different installation processes, especially for family members who may not be tech-savvy. With the Installation Pipeline, our goal is to simplify the entire process and make it user-friendly. Whether you\'re an experienced gamer or not, this update will make installing games easier for you.\\n\\nYou can read the details [here on the GitHub issue](https://github.com/Phalcode/gamevault-app/issues/18).\\n\\nStay tuned for its upcoming release, and to be among the first to try out this awesome feature, make sure to subscribe to the `@Updates` Role on our [Discord server](https://discord.gg/NEdNen2dSu) , if you haven\'t already. We\'ll ping you as soon as it\'s live!\\n\\n#### Join us on Lemmy\\n\\nTo further connect with our amazing community, we\'re excited to announce the launch of our [official Lemmy community](https://lemmy.world/c/phalcode). From now on, we\'ll also regularly share new blog posts there, providing you with more ways to stay informed and engaged. Join the Lemmy forum and become part of the growing GameVault community!\\n\\n#### Share GameVault with Others\\n\\nAs we celebrate this milestone and eagerly anticipate more exciting updates, we invite you to spread the word about GameVault among your friends, family, and gaming or self-hosting communities. Your personal recommendations and referrals have played a significant role in our journey so far, and we believe they\'ll continue to do so in the future.\\n\\nWe want to express our heartfelt appreciation for the feature requests, discussions, and invaluable help on our GitHub. Your support and collaborative efforts help a lot.\\n\\n#### Support Us\\n\\nAs we move forward, we kindly ask for your continued support. GameVault\'s success is currently solely built upon our incredible community, and your encouragement is what fuels us. If you love our app and believe in our vision, please consider supporting us in any way you can. It could even be something simple like a rating on the Microsoft Store. Your backing empowers us to keep our hard work going.\\n\\nWe\'re eagerly looking forward to celebrating more achievements with all of you.\\n\\nStay tuned, stay connected, and let\'s continue this journey together!"},{"id":"/2023/07/20/","metadata":{"permalink":"/blog/2023/07/20/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-20.md","source":"@site/blog/2023-07-20.md","title":"The Migrations are finally completed","description":"Hey folks,","date":"2023-07-20T00:00:00.000Z","tags":[{"inline":true,"label":"app name migration","permalink":"/blog/tags/app-name-migration"},{"inline":true,"label":"Microsoft Store publication","permalink":"/blog/tags/microsoft-store-publication"},{"inline":true,"label":"surge of new users","permalink":"/blog/tags/surge-of-new-users"},{"inline":true,"label":"Discord server promotion","permalink":"/blog/tags/discord-server-promotion"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"logo deciphering","permalink":"/blog/tags/logo-deciphering"},{"inline":true,"label":"box representation","permalink":"/blog/tags/box-representation"},{"inline":true,"label":"keyhole representation","permalink":"/blog/tags/keyhole-representation"},{"inline":true,"label":"logo concept discussion","permalink":"/blog/tags/logo-concept-discussion"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"}],"readingTime":0.615,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"The Migrations are finally completed","authors":["alfagun74"],"tags":["app name migration","Microsoft Store publication","surge of new users","Discord server promotion","spreading the word","logo deciphering","box representation","keyhole representation","logo concept discussion","Discord channel"]},"unlisted":false,"prevItem":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","permalink":"/blog/2023/07/24/"},"nextItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"}},"content":"Hey folks,\\n\\nGreat news. We\'ve successfully migrated our App name in its entirety and will resume advertising as soon as it\'s published on the Microsoft Store. \x3c!-- truncate --\x3e\\n\\nJust a heads up, there might be a surge of new users joining the [Discord](https://discord.gg/NEdNen2dSu) server due to us promoting GameVault across all available platforms now.\\n\\nYou\'re welcome to join in and spread the word about GameVault with your friends, family, social network, or colleagues!\\n\\n**Let\'s decipher the mystery behind the new logo:**\\n![logo](/img/blog/2023-07-19/logo-text-and-image-sbs.png)\\n\\n- The Box represents a Vault with a Keyhole, but it also symbolizes a game dice.\\n- The Keyhole represents a Keyhole, and simultaneously signifies a game piece.\\n\\nDid you find the logo concept creative? Share your thoughts on [discord](https://discord.gg/NEdNen2dSu)!"},{"id":"/2023/07/19/","metadata":{"permalink":"/blog/2023/07/19/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-19.md","source":"@site/blog/2023-07-19.md","title":"Quick Migration Update and new Logo","description":"Hey guys,","date":"2023-07-19T00:00:00.000Z","tags":[{"inline":true,"label":"name migration progress","permalink":"/blog/tags/name-migration-progress"},{"inline":true,"label":"backend application migration","permalink":"/blog/tags/backend-application-migration"},{"inline":true,"label":"documentation migration","permalink":"/blog/tags/documentation-migration"},{"inline":true,"label":"domain acquisition","permalink":"/blog/tags/domain-acquisition"},{"inline":true,"label":"Subreddit migration","permalink":"/blog/tags/subreddit-migration"},{"inline":true,"label":"Lemmy community","permalink":"/blog/tags/lemmy-community"},{"inline":true,"label":"Client Application update","permalink":"/blog/tags/client-application-update"},{"inline":true,"label":"testing","permalink":"/blog/tags/testing"},{"inline":true,"label":"new logo","permalink":"/blog/tags/new-logo"},{"inline":true,"label":"speculation","permalink":"/blog/tags/speculation"},{"inline":true,"label":"Discord channel","permalink":"/blog/tags/discord-channel"},{"inline":true,"label":"migration finalization","permalink":"/blog/tags/migration-finalization"}],"readingTime":0.965,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Quick Migration Update and new Logo","authors":["alfagun74"],"tags":["name migration progress","backend application migration","documentation migration","domain acquisition","Subreddit migration","Lemmy community","Client Application update","testing","new logo","speculation","Discord channel","migration finalization"]},"unlisted":false,"prevItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"},"nextItem":{"title":"A New Name","permalink":"/blog/2023/07/15/"}},"content":"Hey guys,\\n\\nWe have a brief update on the progress of the name migration.\\n\\nWe\'ve successfully completed the migration of the backend application, which is now accessible as `gamevault-backend`. \x3c!-- truncate --\x3e\\n\\nFurthermore, we\'ve migrated the documentation and acquired this domain gamevau.lt. We\'ve set up redirects for our previous domain and the demo server as well.\\n\\nLastly we migrated our Subreddit to [r/Phalcode](https://reddit.com/r/Phalcode) and opened up a new community on [Lemmy](https://lemmy.world/c/phalcode). All further Updates and discussions regarding GameVault can be found there.\\n\\nWe\'re nearly finished, you might say.\\n\\nThe only remaining task is the Client Application. We\'re actively working on it and currently testing the application on our developer edition. Soon, you\'ll be able to seamlessly update your client with the new name and appearance.\\n\\nIn the meantime, our graphic designer has crafted a fresh logo for our new name, GameVault.\\n\\n![logo](/img/blog/2023-07-19/logo-text-and-image-sbs.png)\\n\\nTo make good use of your time while the migrations are in progress, what do you speculate the new logo represents?\\n\\nShare your theories in gamevaults #chat channel on [discord](https://discord.gg/NEdNen2dSu)! We\'ll reveal the answer and shoutout the winner(s) in the next blog post, once the migration is finalized!\\n\\nUntil then \u270c\ufe0f"},{"id":"/2023/07/15/","metadata":{"permalink":"/blog/2023/07/15/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-15.md","source":"@site/blog/2023-07-15.md","title":"A New Name","description":"Hey everyone,","date":"2023-07-15T00:00:00.000Z","tags":[{"inline":true,"label":"poll results","permalink":"/blog/tags/poll-results"},{"inline":true,"label":"renaming app","permalink":"/blog/tags/renaming-app"},{"inline":true,"label":"community feedback","permalink":"/blog/tags/community-feedback"},{"inline":true,"label":"GameStash","permalink":"/blog/tags/game-stash"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameShelf","permalink":"/blog/tags/game-shelf"},{"inline":true,"label":"Harbor","permalink":"/blog/tags/harbor"},{"inline":true,"label":"GameHub","permalink":"/blog/tags/game-hub"},{"inline":true,"label":"market analysis","permalink":"/blog/tags/market-analysis"},{"inline":true,"label":"new name announcement","permalink":"/blog/tags/new-name-announcement"},{"inline":true,"label":"GameVault domain","permalink":"/blog/tags/game-vault-domain"},{"inline":true,"label":"special thanks","permalink":"/blog/tags/special-thanks"},{"inline":true,"label":"Selfhosted Podcast","permalink":"/blog/tags/selfhosted-podcast"},{"inline":true,"label":"Self-Hosted Newsletter","permalink":"/blog/tags/self-hosted-newsletter"},{"inline":true,"label":"transition process","permalink":"/blog/tags/transition-process"}],"readingTime":3.85,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A New Name","authors":["alfagun74"],"tags":["poll results","renaming app","community feedback","GameStash","GameVault","GameShelf","Harbor","GameHub","market analysis","new name announcement","GameVault domain","special thanks","Selfhosted Podcast","Self-Hosted Newsletter","transition process"]},"unlisted":false,"prevItem":{"title":"Quick Migration Update and new Logo","permalink":"/blog/2023/07/19/"},"nextItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"}},"content":"Hey everyone,\\n\\nWe are thrilled to announce that the poll for choosing a new name for our app is finally over. The process of transitioning to the new name will commence very soon, and we can\'t wait to share the exciting updates with you.\x3c!-- truncate --\x3e\\n\\nBut first, let\'s dive into the poll results and shed some light on the important facts without further delay:\\n\\n## Summary\\n\\nIn total, 71 people participated in the poll, providing us with valuable data to draw conclusions from. Here\'s a summary of the key findings:\\n\\n- 52.1% of the community voted against using any terms related to piracy in the app. We understand and respect this choice because it would harm our business and attract the wrong users, as we have no affiliation with piracy.\\n\\n- 42.3% of the community voted to recommend the app under a different name but not with its current name. This feedback motivated us to rename the app, confirming that it wasn\'t just a few critics on Reddit. We want to expand our community to include the families, friends, and colleagues of these people. So please, help us spread the word about the name change!\\n\\n- 36.6% of you said you wouldn\'t contribute to our app at all solely because of its name, even if you had the opportunity. We depend on these contributions to grow and improve, so we now encourage you to participate!\\n\\nWithout further ado, here are the top 5 names that emerged as winners in the poll:\\n\\n1. GameStash (38%)\\n2. GameVault (35.2%)\\n3. GameShelf (31%)\\n4. Harbor (29.6%)\\n5. GameHub (28.2%)\\n\\nAs mentioned earlier, we conducted the poll without conducting market analysis beforehand. However, we recognized the significance of making an informed decision for the benefit of the community. Consequently, we proceeded to analyze each name after the poll to ensure the chosen name resonates with our vision.\\n\\nAllow us to share the summarized results of our market analysis:\\n\\n## Market Analysis\\n\\n### 1. GameStash\\n\\nGoogle Search Results: ~33,600 \\nPossible Domains: gamestash.de\\n\\n- There\'s already an app called [GameStash](https://gamestash.app/) that offers similar features to ours.\\n\\n### 2. GameVault\\n\\nGoogle Search Results: ~800,000 \\nPossible Domains: gamevau.lt, game-vault.de\\n\\n- The term \\"GameVault\\" is associated with a popular online casino/gambling application called [GameVault999](https://gamevault999.com/).\\n\\n### 3. GameShelf\\n\\nGoogle Search Results: ~560,000 \\nPossible Domains: gameshelf.de\\n\\n- The name \\"Gameshelf\\" is already used by two existing applications. One is a [Board-Game-Collection Viewer](https://gameshelf.io/), and the other is a [Gaming Backlog](https://gameshelf.dev) app.\\n\\n### 4. Harbor\\n\\nGoogle Search Results: ~393,000,000 \\nPossible Domains: harborapp.de\\n\\n- \\"Harbor\\" is a very common word, making it challenging to find a suitable domain that aligns with our brand identity.\\n\\n- Additionally, there\'s a well-known app called [Harbor on the Market](https://goharbor.io) related to Docker/Kubernetes.\\n\\n### 5. GameHub\\n\\nGoogle Search Results: ~5,690,000\\nPossible Domains: gamehubapp.de\\n\\n- [GameHub](https://github.com/tkashkin/GameHub) is a popular game library manager\\n- it also sounds like a popular adult site \ud83d\ude01\\n\\n## What\'s Next?\\n\\nWe understand your eagerness for a new name, and we are equally committed to distancing ourselves from the old one. Taking into account all the suggested names and feedback, we engaged in extensive internal brainstorming, free from outside influences.\\n\\nWe sought a name that is descriptive, intuitive, and effectively conveys the purpose of our app. Additionally, we aimed for a name that is easily memorable and emphasizes the ownership and control of a self-hosted server, security, and exclusivity.\\n\\nIntroducing our new name: **GameVault** \\nAvailable soon under this domain: [gamevau.lt](https://gamevau.lt)\\n\\nWe have already secured the domain and registered the name wherever possible. The transition process will commence shortly. We are eager to hear your thoughts on the new name. Do you like it?\\n\\n## Special Thanks \u2764\ufe0f\\n\\nWell, as you all know, this was quite a journey to get here, and we wanted to give our special thanks to:\\n\\n- Everybody who gave this project\'s idea a chance, even if the name was kind of weird.\\n\\n- Everybody who made suggestions on our [Discord](https://discord.gg/NEdNen2dSu) server and participated in the discussions.\\n\\n- Everybody who voted.\\n\\n- A special shoutout to @KairuByte on [Discord](https://discord.gg/NEdNen2dSu) for coming up with the name GameVault.\\n\\n- We would also like to extend our gratitude to [The Selfhosted Podcast](https://selfhosted.show/101?t=2731) for discussing our app. (Brent, we are excited to hear your thoughts on the new name from a marketing standpoint \ud83d\ude1c)\\n\\n- Last but not least, thank you to [The Self-Hosted Newsletter](https://selfh.st/newsletter/2023-07-07/) for mentioning our release.\\n\\nThank you all for your continued support!\\n\\nWe will keep you updated as the transition unfolds. In the meantime, head over to our [Discord](https://discord.gg/NEdNen2dSu) channel to celebrate and share your thoughts on the new name.\\n\\nStay tuned!"},{"id":"/2023/07/13/","metadata":{"permalink":"/blog/2023/07/13/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-13.md","source":"@site/blog/2023-07-13.md","title":"A Closer Look at GameVaults \'Source-Available\' Nature","description":"Hey everyone,","date":"2023-07-13T00:00:00.000Z","tags":[{"inline":true,"label":"source-available software","permalink":"/blog/tags/source-available-software"},{"inline":true,"label":"open-source","permalink":"/blog/tags/open-source"},{"inline":true,"label":"transparency","permalink":"/blog/tags/transparency"},{"inline":true,"label":"control","permalink":"/blog/tags/control"},{"inline":true,"label":"software development","permalink":"/blog/tags/software-development"},{"inline":true,"label":"code access","permalink":"/blog/tags/code-access"},{"inline":true,"label":"hybrid model","permalink":"/blog/tags/hybrid-model"},{"inline":true,"label":"software licensing","permalink":"/blog/tags/software-licensing"},{"inline":true,"label":"revenue generation","permalink":"/blog/tags/revenue-generation"},{"inline":true,"label":"user engagement","permalink":"/blog/tags/user-engagement"}],"readingTime":2.57,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","authors":["alfagun74"],"tags":["source-available software","open-source","transparency","control","software development","code access","hybrid model","software licensing","revenue generation","user engagement"]},"unlisted":false,"prevItem":{"title":"A New Name","permalink":"/blog/2023/07/15/"},"nextItem":{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/"}},"content":"Hey everyone,\\n\\ntoday i want to clarify why GameVault isn\'t considered \\"open-source\\" by definition. \x3c!-- truncate --\x3e\\n\\nYou see, GameVault is what we like to call [\\"source-available\\"](https://wikipedia.org/wiki/Source-available_software) software. This means that our code is open for you to explore and modify, but it doesn\'t fully meet all the criteria of being considered open-source. I want to take a moment to explain what open-source truly means and why we\'ve taken a slightly different approach.\\n\\nAccording to the widely recognized definitions, [\\"open-source\\"](https://wikipedia.org/wiki/Open-source_software) software, as one would think, not only provides access to the source code but also offers certain freedoms to its users. It allows them to use, modify, and distribute the software freely, even for commercial purposes.\\n\\nFor a self-hosted app like GameVault, we believe it\'s crucual to disclose the source code. We want you, our users, to have full transparency and control over the software you use on your servers. We don\'t want you to be unaware of what\'s happening behind the scenes, as is sometimes the case with closed-source applications like Plex, for example.\\n\\nNow, you may be wondering why we didn\'t make GameVault fully open-source. The answer lies in our desire to protect our code from unauthorized use and commercial exploitation. While we absolutely encourage you to copy, modify, and share our code for personal use, we want to prevent others from profiting off our hard work by selling our software without our consent.\\n\\nIt\'s important to acknowledge that maintaining and developing a software project requires resources. While we admire the open-source community and its valuable contributions, sustaining GameVault solely through donations or offering it for free indefinitely is not feasible. For instance, Jellyfin, a popular open-source app developed over a decade, generates only around $13,500 per year (according to their opencollective page). In contrast, Plex, a closed-source alternative, earns a significant $8.5 million annually. Our company\'s main goal is to keep the core functionality of GameVault free, but we also need to explore ways to generate revenue in order to support its future growth and improvement. We are currently considering monetizing additional convenience features for the Client Application in the future, although nothing has been finalized yet.\\n\\nWe genuinely appreciate your understanding. As a small business with just two members, we strive to provide you with a valuable product but cannot continue to do so as volunteers indefinitely. Sustaining losses in the long term would not be sustainable, especially considering our local tax obligations. We have families and commitments that cannot be neglected, and this project is not our primary job. Therefore, please understand that GameVault may not strictly align with the traditional definition of \\"open-source,\\" and we no longer characterize it as such. Our intention is to be transparent and present our perspective. Your understanding, support, and empathy mean a great deal to us.\\n\\nIf you have any thoughts or comments on this topic, we\'d be more than happy to hear from you. Feel free to share your feedback on our [Discord](https://discord.gg/NEdNen2dSu) server. We truly value your input and look forward to engaging with you there.\\n\\n`EDIT: Updated Application Name`"},{"id":"/2023/07/09/","metadata":{"permalink":"/blog/2023/07/09/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-09.md","source":"@site/blog/2023-07-09.md","title":"Battling Harassment and Trolls in Our App Community","description":"Hey folks,","date":"2023-07-09T00:00:00.000Z","tags":[{"inline":true,"label":"harassment","permalink":"/blog/tags/harassment"},{"inline":true,"label":"blackmail","permalink":"/blog/tags/blackmail"},{"inline":true,"label":"threats","permalink":"/blog/tags/threats"},{"inline":true,"label":"spam","permalink":"/blog/tags/spam"},{"inline":true,"label":"trolls","permalink":"/blog/tags/trolls"},{"inline":true,"label":"negative narratives","permalink":"/blog/tags/negative-narratives"},{"inline":true,"label":"safe environment","permalink":"/blog/tags/safe-environment"},{"inline":true,"label":"racist","permalink":"/blog/tags/racist"},{"inline":true,"label":"developers","permalink":"/blog/tags/developers"},{"inline":true,"label":"public","permalink":"/blog/tags/public"},{"inline":true,"label":"creepy behavior","permalink":"/blog/tags/creepy-behavior"},{"inline":true,"label":"app","permalink":"/blog/tags/app"},{"inline":true,"label":"support","permalink":"/blog/tags/support"},{"inline":true,"label":"financial assistance","permalink":"/blog/tags/financial-assistance"},{"inline":true,"label":"motivation","permalink":"/blog/tags/motivation"},{"inline":true,"label":"GameVault app","permalink":"/blog/tags/game-vault-app"},{"inline":true,"label":"bugs","permalink":"/blog/tags/bugs"},{"inline":true,"label":"feature requests","permalink":"/blog/tags/feature-requests"},{"inline":true,"label":"improvement","permalink":"/blog/tags/improvement"},{"inline":true,"label":"success","permalink":"/blog/tags/success"},{"inline":true,"label":"engagement","permalink":"/blog/tags/engagement"}],"readingTime":1.955,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Battling Harassment and Trolls in Our App Community","authors":["alfagun74"],"tags":["harassment","blackmail","threats","spam","trolls","negative narratives","safe environment","racist","developers","public","creepy behavior","app","support","financial assistance","motivation","GameVault app","bugs","feature requests","improvement","success","engagement"]},"unlisted":false,"prevItem":{"title":"A Closer Look at GameVaults \'Source-Available\' Nature","permalink":"/blog/2023/07/13/"},"nextItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}},"content":"Hey folks,\\n\\nWe have an important update to share with you all while our poll is in progress. It has come to our attention that a group of individuals has been engaging in harassing, blackmailing, and threatening behavior towards us. \x3c!-- truncate --\x3e\\n\\nIt began with spam on our Issue Trackers and [Discord](https://discord.gg/NEdNen2dSu) Server but this situation has escalated to the point where these individuals went so far as to search me up on LinkedIn and threaten to inform my employer with baseless accusations of racism because of trivial reasons like the branch name in our github project being \\"master\\". Moreover, we have received reports that these trolls have extended their actions directly to other members of this server, attempting to spread negative narratives and disrupting the community atmosphere.\\n\\nTo address this issue, we kindly request that you promptly report any encounters with these trolls to both [Discord](https://discord.gg/NEdNen2dSu) and our dedicated team of moderators. By doing so, we can take appropriate measures to handle the situation and maintain a safe environment for all.\\n\\nWe would like to emphasize that we are not racist individuals, but rather developers who decided to share our hard work with the community, hoping to bring joy and utility to everyone. Unfortunately, we did not anticipate encountering such creepy behavior when we made the project public. It has made us question whether it was the right decision to open up our work in the first place.\\n\\nIf you appreciate our efforts and would like to support us and the app, we humbly ask for your financial assistance. Even a small contribution of five bucks on [Kofi](https://ko-fi.com/phalcode) would go a long way in helping us maintain our motivation and dedication. Alternatively, if monetary support isn\'t possible, we would be incredibly grateful if you could share kind words about how the GameVault app has positively impacted your life in the #chat channel. Your encouragement means the world to us. \ud83e\udd70\\n\\nIn addition, we encourage you to continue reporting any bugs you encounter and submitting feature requests in the respective GitHub trackers. With your valuable input, we can continue improving the app and making it even better.\\n\\nRemember, the success of this project relies on your support and engagement. Let\'s stand together against these trolls and ensure a positive and inclusive community experience. Thank you for your attention and understanding."},{"id":"/2023/07/08/","metadata":{"permalink":"/blog/2023/07/08/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-08.md","source":"@site/blog/2023-07-08.md","title":"Choosing a New, Family-Friendly Name for this project!","description":"Hello, everyone!","date":"2023-07-08T00:00:00.000Z","tags":[{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"gaming platform","permalink":"/blog/tags/gaming-platform"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"new name","permalink":"/blog/tags/new-name"},{"inline":true,"label":"family-friendly","permalink":"/blog/tags/family-friendly"},{"inline":true,"label":"poll","permalink":"/blog/tags/poll"},{"inline":true,"label":"AI-generated names","permalink":"/blog/tags/ai-generated-names"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"inclusivity","permalink":"/blog/tags/inclusivity"},{"inline":true,"label":"user participation","permalink":"/blog/tags/user-participation"},{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"},{"inline":true,"label":"decision-making","permalink":"/blog/tags/decision-making"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"platform values","permalink":"/blog/tags/platform-values"},{"inline":true,"label":"voting","permalink":"/blog/tags/voting"},{"inline":true,"label":"future development","permalink":"/blog/tags/future-development"}],"readingTime":1.26,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Choosing a New, Family-Friendly Name for this project!","authors":["alfagun74"],"tags":["source-available","gaming platform","GameVault","new name","family-friendly","poll","AI-generated names","feedback","inclusivity","user participation","announcement","decision-making","community","platform values","voting","future development"]},"unlisted":false,"prevItem":{"title":"Battling Harassment and Trolls in Our App Community","permalink":"/blog/2023/07/09/"},"nextItem":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","permalink":"/blog/2023/07/01/"}},"content":"Hello, everyone!\\n\\nWe have an important announcement to share about our [source-available](https://en.wikipedia.org/wiki/Source-available_software) gaming platform, project. We have listened to your feedback and concerns, and now we need your help in choosing a new, family-friendly name that better reflects our platform\'s values. \x3c!-- truncate --\x3e To make this decision-making process more convenient, we have created a poll with 100 potential names, suggested by you on our [Discord](https://discord.gg/NEdNen2dSu), some of which were generated by AI. Your participation in shaping the future of our platform is greatly appreciated.\\n\\nWe kindly request your support in selecting a new name for our gaming platform. The poll offers a variety of names, and we ask that you choose at least 10 names (10%) that appeal to you. By gathering diverse input and minimizing bias, we aim to create an inclusive and enjoyable experience for all users. We apologize if the current name has caused any discomfort, and we are committed to creating a welcoming environment for gamers.\\n\\nTo cast your votes and contribute to the selection of a new, family-friendly name for our [source-available](https://en.wikipedia.org/wiki/Source-available_software) gaming platform, please click on the link provided at the end of this post. Your voice matters, and together, we can find a name that truly represents our app\'s essence. The results will be announced on this blog around July 15, 2023.\\n\\nWe sincerely appreciate your support and encourage you to stay tuned for updates as we continue to improve our platform based on your valuable feedback.\\n\\nLink to the poll: [https://forms.gle/cYsURG6BqMXcxE3B8](https://forms.gle/cYsURG6BqMXcxE3B8)\\n\\nHappy voting!"},{"id":"/2023/07/01/","metadata":{"permalink":"/blog/2023/07/01/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-01.md","source":"@site/blog/2023-07-01.md","title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","description":"Hey Guys,","date":"2023-07-01T00:00:00.000Z","tags":[{"inline":true,"label":"gaming","permalink":"/blog/tags/gaming"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"source-available","permalink":"/blog/tags/source-available"},{"inline":true,"label":"self-hosted","permalink":"/blog/tags/self-hosted"},{"inline":true,"label":"alternative","permalink":"/blog/tags/alternative"},{"inline":true,"label":"cloud-based game platforms","permalink":"/blog/tags/cloud-based-game-platforms"},{"inline":true,"label":"DRM-free games","permalink":"/blog/tags/drm-free-games"},{"inline":true,"label":"file server","permalink":"/blog/tags/file-server"},{"inline":true,"label":"multi-user authentication","permalink":"/blog/tags/multi-user-authentication"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"RAWG API","permalink":"/blog/tags/rawg-api"},{"inline":true,"label":"health monitoring","permalink":"/blog/tags/health-monitoring"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"Discord server","permalink":"/blog/tags/discord-server"},{"inline":true,"label":"Reddit forum","permalink":"/blog/tags/reddit-forum"},{"inline":true,"label":"Lemmy forum","permalink":"/blog/tags/lemmy-forum"}],"readingTime":1.78,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Introducing GameVault \ud83d\ude80 - The self-hosted gaming platform for DRM-free games","authors":["alfagun74"],"tags":["gaming","GameVault","source-available","self-hosted","alternative","cloud-based game platforms","DRM-free games","file server","multi-user authentication","metadata","RAWG API","health monitoring","API","Discord server","Reddit forum","Lemmy forum"]},"unlisted":false,"prevItem":{"title":"Choosing a New, Family-Friendly Name for this project!","permalink":"/blog/2023/07/08/"}},"content":"Hey Guys,\\n\\nOur team has been working tirelessly for the past year on creating GameVault, the source-available, self-hosted, and free alternative to traditional cloud-based game platforms like Steam, Origin, Epic Games, and GoG. We are excited to share that GameVault is now available for everyone to use, and we are delighted to disclose it to the community. \x3c!-- truncate --\x3e\\n\\nWith GameVault, you can play and track games together with your friends on a shared file server, free from any restrictions that traditional game platforms may impose. We have designed it to work with DRM-free games, providing a unique solution for those who want a more flexible and open approach to gaming. Think of it like Jellyfin, but for Videogames.\\n\\nGameVault offers a self-hosted approach that gives you complete control over your gaming experience. The platform enables you to browse your server\'s game collection, securely download games, launch and play them, and even track your playtimes and progress - regardless of whether the server is offline. Additionally, you can compare stats and play states with other users on the server.\\n\\nOur server features offer automatic indexing of games on the file system into a database, enrichment of games with metadata like tags and genres using RAWG API, multi-user authentication, and configurable logging. We have also implemented health monitoring, full-text search, filters, sorting, pagination, and a fully documented API. The GameVault platform is highly configurable to suit your needs.\\n\\nWe are thrilled that you have found us, and we invite you to try GameVault today. We would be grateful for any contributions, feedback, bug reports, and feature requests you might have. You can also support us by donating using the links provided on our website. If you have any questions or would like to connect with other GameVault users, please join our [Discord](https://discord.gg/NEdNen2dSu), Reddit and Lemmy communities - links to which are available in the footer.\\n\\nWe are passionate about creating a gaming experience that is more open, flexible, and enjoyable for everyone. We hope you will join us on this journey and experience the benefits of a truly source-available alternative to traditional game platforms with GameVault."}]}}')}}]); \ No newline at end of file diff --git a/assets/js/f8aea940.5099beb6.js b/assets/js/f8aea940.5099beb6.js new file mode 100644 index 000000000..e701bc4f4 --- /dev/null +++ b/assets/js/f8aea940.5099beb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6557],{5238:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"client-docs/themes","title":"Themes","description":"GameVault offers the option to apply different themes to your GameVault client application. With GameVault+, you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience.","source":"@site/docs/client-docs/themes.md","sourceDirName":"client-docs","slug":"/client-docs/themes","permalink":"/docs/client-docs/themes","draft":false,"unlisted":false,"editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/themes.md","tags":[],"version":"current","lastUpdatedBy":"Alper Alkan","lastUpdatedAt":1732144127000,"frontMatter":{"title":"Themes"},"sidebar":"docs","previous":{"title":"GUI Overview","permalink":"/docs/client-docs/gui"},"next":{"title":"REST API Usage","permalink":"/docs/advanced-usage/rest-api"}}');var i=s(6070),n=s(8591);const o={title:"Themes"},l=void 0,r={},c=[{value:"Free Themes",id:"free-themes",level:2},{value:"Premium Themes",id:"premium-themes",level:2},{value:"Custom Themes",id:"custom-themes",level:2}];function d(e){const t={a:"a",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["GameVault offers the option to apply different themes to your GameVault client application. With ",(0,i.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"}),", you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience."]}),"\n",(0,i.jsx)(t.h2,{id:"free-themes",children:"Free Themes"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Default (Dark)"}),": The default GameVault theme, reflecting the 2024 GameVault rebrand with dark tones.\n",(0,i.jsx)(t.img,{alt:"Default (Dark)",src:s(7945).A+"",width:"2552",height:"1392"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Default (Light)"}),": An alternative light version of the default GameVault theme, also based on the 2024 GameVault rebrand.\n",(0,i.jsx)(t.img,{alt:"Default (Light)",src:s(5673).A+"",width:"2552",height:"1392"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Classic (Dark)"}),": This theme preserves the traditional application colors for users accustomed to the old design.\n",(0,i.jsx)(t.img,{alt:"Classic (Dark)",src:s(9952).A+"",width:"2552",height:"1392"})]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"premium-themes",children:"Premium Themes"}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"})," comes with more themes you can choose from. A list of premium themes is available in the ",(0,i.jsx)(t.a,{href:"/docs/gamevault-plus/themes",children:"GameVault+ Themes"})," section of the documentation."]}),"\n",(0,i.jsx)(t.h2,{id:"custom-themes",children:"Custom Themes"}),"\n",(0,i.jsxs)(t.p,{children:["Custom themes are only available for ",(0,i.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"})," subscribers. See ",(0,i.jsx)(t.a,{href:"/docs/gamevault-plus/themes",children:"GameVault+ Themes"})," for more information."]})]})}function m(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},9952:(e,t,s)=>{s.d(t,{A:()=>a});const a=s.p+"assets/images/classic_dark-bec363a5279cb92c28e78e6b03bf9682.png"},7945:(e,t,s)=>{s.d(t,{A:()=>a});const a=s.p+"assets/images/default_dark-5736b1f79f7b13358172ed71dc831afd.png"},5673:(e,t,s)=>{s.d(t,{A:()=>a});const a=s.p+"assets/images/default_light-5bc18bd3650cc0d98fb39d46d70c9e2f.png"},8591:(e,t,s)=>{s.d(t,{R:()=>o,x:()=>l});var a=s(758);const i={},n=a.createContext(i);function o(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f8aea940.a76ffdb7.js b/assets/js/f8aea940.a76ffdb7.js deleted file mode 100644 index 1e64c3379..000000000 --- a/assets/js/f8aea940.a76ffdb7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[5961],{5799:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>o,default:()=>m,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var a=s(2676),i=s(8358);const n={title:"Themes"},o=void 0,l={id:"client-docs/themes",title:"Themes",description:"GameVault offers the option to apply different themes to your GameVault client application. With GameVault+, you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience.",source:"@site/docs/client-docs/themes.md",sourceDirName:"client-docs",slug:"/client-docs/themes",permalink:"/docs/client-docs/themes",draft:!1,unlisted:!1,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/docs/client-docs/themes.md",tags:[],version:"current",lastUpdatedBy:"Alper Alkan",lastUpdatedAt:173010786e4,frontMatter:{title:"Themes"},sidebar:"docs",previous:{title:"GUI Overview",permalink:"/docs/client-docs/gui"},next:{title:"REST API Usage",permalink:"/docs/advanced-usage/rest-api"}},r={},c=[{value:"Free Themes",id:"free-themes",level:2},{value:"Premium Themes",id:"premium-themes",level:2},{value:"Custom Themes",id:"custom-themes",level:2}];function d(e){const t={a:"a",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(t.p,{children:["GameVault offers the option to apply different themes to your GameVault client application. With ",(0,a.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"}),", you gain access to a variety of additional themes and also the ability to apply custom themes, to personalize your experience."]}),"\n",(0,a.jsx)(t.h2,{id:"free-themes",children:"Free Themes"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Default (Dark)"}),": The default GameVault theme, reflecting the 2024 GameVault rebrand with dark tones.\n",(0,a.jsx)(t.img,{alt:"Default (Dark)",src:s(1130).Z+"",width:"2552",height:"1392"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Default (Light)"}),": An alternative light version of the default GameVault theme, also based on the 2024 GameVault rebrand.\n",(0,a.jsx)(t.img,{alt:"Default (Light)",src:s(8428).Z+"",width:"2552",height:"1392"})]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Classic (Dark)"}),": This theme preserves the traditional application colors for users accustomed to the old design.\n",(0,a.jsx)(t.img,{alt:"Classic (Dark)",src:s(2952).Z+"",width:"2552",height:"1392"})]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"premium-themes",children:"Premium Themes"}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"})," comes with more themes you can choose from. A list of premium themes is available in the ",(0,a.jsx)(t.a,{href:"/docs/gamevault-plus/themes",children:"GameVault+ Themes"})," section of the documentation."]}),"\n",(0,a.jsx)(t.h2,{id:"custom-themes",children:"Custom Themes"}),"\n",(0,a.jsxs)(t.p,{children:["Custom themes are only available for ",(0,a.jsx)(t.a,{href:"/docs/gamevault-plus/introduction",children:"GameVault+"})," subscribers. See ",(0,a.jsx)(t.a,{href:"/docs/gamevault-plus/themes",children:"GameVault+ Themes"})," for more information."]})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},2952:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/classic_dark-bec363a5279cb92c28e78e6b03bf9682.png"},1130:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/default_dark-5736b1f79f7b13358172ed71dc831afd.png"},8428:(e,t,s)=>{s.d(t,{Z:()=>a});const a=s.p+"assets/images/default_light-5bc18bd3650cc0d98fb39d46d70c9e2f.png"},8358:(e,t,s)=>{s.d(t,{Z:()=>l,a:()=>o});var a=s(5271);const i={},n=a.createContext(i);function o(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f94e70f3.5df7c9c2.js b/assets/js/f94e70f3.266815c0.js similarity index 84% rename from assets/js/f94e70f3.5df7c9c2.js rename to assets/js/f94e70f3.266815c0.js index ecd903031..a435e09c8 100644 --- a/assets/js/f94e70f3.5df7c9c2.js +++ b/assets/js/f94e70f3.266815c0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6609],{7006:e=>{e.exports=JSON.parse('{"tag":{"label":"DRM-free","permalink":"/blog/tags/drm-free","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/drm-free","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9589],{1552:e=>{e.exports=JSON.parse('{"tag":{"label":"DRM-free","permalink":"/blog/tags/drm-free","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/drm-free","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/fb0a08ce.09e72734.js b/assets/js/fb0a08ce.09e72734.js new file mode 100644 index 000000000..af2e9a84a --- /dev/null +++ b/assets/js/fb0a08ce.09e72734.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4034],{6323:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var i=n(1757),a=n(6070),l=n(8591);const o={title:"Celebrating 600+ Installations and announcing the upcoming big feature",authors:["alfagun74"],tags:["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},s=void 0,r={authorsImageUrls:[void 0]},u=[];function g(e){const t={p:"p",...(0,l.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hey everyone,"}),"\n",(0,a.jsx)(t.p,{children:"We're excited to share some great news with you all! GameVault has reached a small milestone with over 600 official installations of our GameVault Client Application."})]})}function m(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(g,{...e})}):g(e)}},8591:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>s});var i=n(758);const a={},l=i.createContext(a);function o(e){const t=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),i.createElement(l.Provider,{value:t},e.children)}},1757:e=>{e.exports=JSON.parse('{"permalink":"/blog/2023/07/24/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-24.md","source":"@site/blog/2023-07-24.md","title":"Celebrating 600+ Installations and announcing the upcoming big feature","description":"Hey everyone,","date":"2023-07-24T00:00:00.000Z","tags":[{"inline":true,"label":"GameVault milestone","permalink":"/blog/tags/game-vault-milestone"},{"inline":true,"label":"official installations","permalink":"/blog/tags/official-installations"},{"inline":true,"label":"Discord community growth","permalink":"/blog/tags/discord-community-growth"},{"inline":true,"label":"gratitude","permalink":"/blog/tags/gratitude"},{"inline":true,"label":"feedback","permalink":"/blog/tags/feedback"},{"inline":true,"label":"love for GameVault","permalink":"/blog/tags/love-for-game-vault"},{"inline":true,"label":"upcoming update","permalink":"/blog/tags/upcoming-update"},{"inline":true,"label":"Installation Pipeline","permalink":"/blog/tags/installation-pipeline"},{"inline":true,"label":"simplifying game installation","permalink":"/blog/tags/simplifying-game-installation"},{"inline":true,"label":"GitHub issue","permalink":"/blog/tags/git-hub-issue"},{"inline":true,"label":"subscription to Updates role","permalink":"/blog/tags/subscription-to-updates-role"},{"inline":true,"label":"Lemmy community launch","permalink":"/blog/tags/lemmy-community-launch"},{"inline":true,"label":"sharing blog posts","permalink":"/blog/tags/sharing-blog-posts"},{"inline":true,"label":"spreading the word","permalink":"/blog/tags/spreading-the-word"},{"inline":true,"label":"support request","permalink":"/blog/tags/support-request"},{"inline":true,"label":"continued support","permalink":"/blog/tags/continued-support"},{"inline":true,"label":"celebration of achievements","permalink":"/blog/tags/celebration-of-achievements"}],"readingTime":2.39,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Celebrating 600+ Installations and announcing the upcoming big feature","authors":["alfagun74"],"tags":["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},"unlisted":false,"prevItem":{"title":"Please help us prioritize!","permalink":"/blog/2023/07/29/"},"nextItem":{"title":"The Migrations are finally completed","permalink":"/blog/2023/07/20/"}}')}}]); \ No newline at end of file diff --git a/assets/js/fb0a08ce.709e5246.js b/assets/js/fb0a08ce.709e5246.js deleted file mode 100644 index cdb655785..000000000 --- a/assets/js/fb0a08ce.709e5246.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1392],{83:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});var a=n(2676),i=n(8358);const l={title:"Celebrating 600+ Installations and announcing the upcoming big feature",authors:["alfagun74"],tags:["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},o=void 0,s={permalink:"/blog/2023/07/24/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2023-07-24.md",source:"@site/blog/2023-07-24.md",title:"Celebrating 600+ Installations and announcing the upcoming big feature",description:"Hey everyone,",date:"2023-07-24T00:00:00.000Z",tags:[{inline:!0,label:"GameVault milestone",permalink:"/blog/tags/game-vault-milestone"},{inline:!0,label:"official installations",permalink:"/blog/tags/official-installations"},{inline:!0,label:"Discord community growth",permalink:"/blog/tags/discord-community-growth"},{inline:!0,label:"gratitude",permalink:"/blog/tags/gratitude"},{inline:!0,label:"feedback",permalink:"/blog/tags/feedback"},{inline:!0,label:"love for GameVault",permalink:"/blog/tags/love-for-game-vault"},{inline:!0,label:"upcoming update",permalink:"/blog/tags/upcoming-update"},{inline:!0,label:"Installation Pipeline",permalink:"/blog/tags/installation-pipeline"},{inline:!0,label:"simplifying game installation",permalink:"/blog/tags/simplifying-game-installation"},{inline:!0,label:"GitHub issue",permalink:"/blog/tags/git-hub-issue"},{inline:!0,label:"subscription to Updates role",permalink:"/blog/tags/subscription-to-updates-role"},{inline:!0,label:"Lemmy community launch",permalink:"/blog/tags/lemmy-community-launch"},{inline:!0,label:"sharing blog posts",permalink:"/blog/tags/sharing-blog-posts"},{inline:!0,label:"spreading the word",permalink:"/blog/tags/spreading-the-word"},{inline:!0,label:"support request",permalink:"/blog/tags/support-request"},{inline:!0,label:"continued support",permalink:"/blog/tags/continued-support"},{inline:!0,label:"celebration of achievements",permalink:"/blog/tags/celebration-of-achievements"}],readingTime:2.39,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Celebrating 600+ Installations and announcing the upcoming big feature",authors:["alfagun74"],tags:["GameVault milestone","official installations","Discord community growth","gratitude","feedback","love for GameVault","upcoming update","Installation Pipeline","simplifying game installation","GitHub issue","subscription to Updates role","Lemmy community launch","sharing blog posts","spreading the word","support request","continued support","celebration of achievements"]},unlisted:!1,prevItem:{title:"Please help us prioritize!",permalink:"/blog/2023/07/29/"},nextItem:{title:"The Migrations are finally completed",permalink:"/blog/2023/07/20/"}},r={authorsImageUrls:[void 0]},u=[];function g(e){const t={p:"p",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Hey everyone,"}),"\n",(0,a.jsx)(t.p,{children:"We're excited to share some great news with you all! GameVault has reached a small milestone with over 600 official installations of our GameVault Client Application."})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(g,{...e})}):g(e)}},8358:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>o});var a=n(5271);const i={},l=a.createContext(i);function o(e){const t=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb0e7a2f.14a490bd.js b/assets/js/fb0e7a2f.14a490bd.js deleted file mode 100644 index f738deada..000000000 --- a/assets/js/fb0e7a2f.14a490bd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4893],{7641:a=>{a.exports=JSON.parse('{"tag":{"label":"RAWG","permalink":"/blog/tags/rawg","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/rawg","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/3f6275a8.0faaee88.js b/assets/js/fb0e7a2f.daf52fca.js similarity index 50% rename from assets/js/3f6275a8.0faaee88.js rename to assets/js/fb0e7a2f.daf52fca.js index 4d523b2fe..5d37bb761 100644 --- a/assets/js/3f6275a8.0faaee88.js +++ b/assets/js/fb0e7a2f.daf52fca.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[447],{6195:a=>{a.exports=JSON.parse('{"tag":{"label":"bugs","permalink":"/blog/tags/bugs","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/bugs","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[494],{7197:a=>{a.exports=JSON.parse('{"tag":{"label":"RAWG","permalink":"/blog/tags/rawg","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/rawg","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/fbaf179c.289c4e7f.js b/assets/js/fbaf179c.289c4e7f.js deleted file mode 100644 index ba0687908..000000000 --- a/assets/js/fbaf179c.289c4e7f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4760],{3507:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var n=t(2676),i=t(8358);const l={title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",authors:["alfagun74"],tags:["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},o=void 0,r={permalink:"/blog/2024/05/07/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-05-07.md",source:"@site/blog/2024-05-07.md",title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",description:"Hey everyone!",date:"2024-05-07T00:00:00.000Z",tags:[{inline:!0,label:"game",permalink:"/blog/tags/game"},{inline:!0,label:"metadata",permalink:"/blog/tags/metadata"},{inline:!0,label:"database",permalink:"/blog/tags/database"},{inline:!0,label:"videogame",permalink:"/blog/tags/videogame"},{inline:!0,label:"RAWG",permalink:"/blog/tags/rawg"},{inline:!0,label:"IGDB",permalink:"/blog/tags/igdb"},{inline:!0,label:"twitch.tv",permalink:"/blog/tags/twitch-tv"},{inline:!0,label:"API",permalink:"/blog/tags/api"},{inline:!0,label:"partnership",permalink:"/blog/tags/partnership"},{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"solution",permalink:"/blog/tags/solution"},{inline:!0,label:"Steam",permalink:"/blog/tags/steam"},{inline:!0,label:"backend",permalink:"/blog/tags/backend"},{inline:!0,label:"update",permalink:"/blog/tags/update"},{inline:!0,label:"features",permalink:"/blog/tags/features"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"GameVault+",permalink:"/blog/tags/game-vault"},{inline:!0,label:"easter egg",permalink:"/blog/tags/easter-egg"}],readingTime:2.525,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",authors:["alfagun74"],tags:["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},unlisted:!1,prevItem:{title:"An update so major, we could have built the product from scratch.",permalink:"/blog/2024/10/20/"},nextItem:{title:"GameVault+ out now",permalink:"/blog/2024/04/14/"}},s={authorsImageUrls:[void 0]},d=[{value:"GameVault's new metadata provider strategy",id:"gamevaults-new-metadata-provider-strategy",level:2},{value:"Temporary solution: Implementing a RAWG replacement",id:"temporary-solution-implementing-a-rawg-replacement",level:2},{value:"Exciting new features",id:"exciting-new-features",level:2},{value:"Supporting GameVault",id:"supporting-gamevault",level:2}];function u(e){const a={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey everyone!"}),"\n",(0,n.jsxs)(a.p,{children:["In our last post we mentioned the challenges we've been facing with the videogame metadata database we've been using, ",(0,n.jsx)(a.a,{href:"https://rawg.io/",children:"rawg.io"}),". Unfortunately, it's become an unmaintained abandonware, causing frequent downtime and issues like incorrect search results and registration problems. The situation peaked on May 5th when the service went down completely for a day."]}),"\n",(0,n.jsx)(a.h2,{id:"gamevaults-new-metadata-provider-strategy",children:"GameVault's new metadata provider strategy"}),"\n",(0,n.jsx)(a.p,{children:"To address these issues, we're making significant changes to GameVault's metadata system. Our goal is to make GameVault metadata provider agnostic, allowing users to seamlessly plug in their preferred metadata provider."}),"\n",(0,n.jsx)(a.p,{children:"We're also excited to announce our official partnership with IGDB (twitch.tv), a trusted video game database. Going forward, GameVault will primarily use IGDB's APIs out of the box."}),"\n",(0,n.jsxs)(a.p,{children:["More details on our plans can be found in this ",(0,n.jsx)(a.a,{href:"https://github.com/Phalcode/gamevault-backend/issues/258",children:"GitHub ticket"}),". We also plan to continue supporting the use of your own API keys and other vendors."]}),"\n",(0,n.jsx)(a.p,{children:"However, as decided in our recent poll, we will be removing all support for RAWG."}),"\n",(0,n.jsx)(a.h2,{id:"temporary-solution-implementing-a-rawg-replacement",children:"Temporary solution: Implementing a RAWG replacement"}),"\n",(0,n.jsxs)(a.p,{children:["However, implementing these changes will take time, and we are both currently busy with work commitments and travel plans. So what happens if RAWG suddenly stops working while we're away? To address this concern, ",(0,n.jsx)(a.a,{href:"https://github.com/Toylerrr",children:"Toylerrr"}),", one of our most valuable community members, had a great idea. He began developing a solution that would be a drop-in replacement for RAWG. An application that mimicked the behavior of RAWG, but fetched data from Steam instead. All you have to do is replace the url in the ",(0,n.jsx)(a.code,{children:"RAWG_API_URL"})," environmental variable."]}),"\n",(0,n.jsxs)(a.p,{children:["We loved the idea and built on it. Introducing ",(0,n.jsx)(a.a,{href:"https://github.com/Phalcode/rawg-to-steam-redirect",children:"rawg-to-steam-redirect"}),"."]}),"\n",(0,n.jsx)(a.p,{children:"The link above explains how it works and how you can use it today."}),"\n",(0,n.jsx)(a.p,{children:"What we liked most about it is that it required minimal backend changes to integrate. We have already tested this solution on our 667 games server and it works great. The quality of box art for example is much better. One drawback is that Steam does not have a lot of tags in its API."}),"\n",(0,n.jsxs)(a.p,{children:["While ",(0,n.jsx)(a.code,{children:"https://api.rawg.io/api"})," will remain the default ",(0,n.jsx)(a.code,{children:"RAWG_API_URL"})," for now, you can switch between RAWG and the new solution at any time. Just make sure your GameVault backend is updated to at least v12.1.0."]}),"\n",(0,n.jsx)(a.h2,{id:"exciting-new-features",children:"Exciting new features"}),"\n",(0,n.jsx)(a.p,{children:"In addition to these changes, we're excited to introduce you to some new features that were recently released:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsxs)(a.li,{children:[(0,n.jsx)(a.strong,{children:"\ud83d\udd16 Bookmarking Video Games:"})," You can now bookmark your favorite games within GameVault."]}),"\n",(0,n.jsxs)(a.li,{children:[(0,n.jsx)(a.strong,{children:"\u23ef\ufe0f Download Management:"})," GameVault now supports pausing, auto-resuming, and resuming downloads."]}),"\n",(0,n.jsxs)(a.li,{children:[(0,n.jsx)(a.strong,{children:"\ud83d\udd12 Encrypted Archives:"})," GameVault now supports password protected archives."]}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:"We hope these updates will make your experience with GameVault even better as we move through this transition period."}),"\n",(0,n.jsx)(a.h2,{id:"supporting-gamevault",children:"Supporting GameVault"}),"\n",(0,n.jsx)(a.p,{children:"Finally, we want to thank all of you for making all of this possible. If you have not already done so, please consider upgrading to GameVault+ to flex with animated profile pictures on your server. We would really appreciate it. Bet you can't find the GameVault+ easter egg though... \ud83d\ude09"}),"\n",(0,n.jsx)(a.p,{children:"With love,"}),"\n",(0,n.jsx)(a.p,{children:"Phalcode"})]})}function m(e={}){const{wrapper:a}={...(0,i.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>r,a:()=>o});var n=t(5271);const i={},l=n.createContext(i);function o(e){const a=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(l.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fbaf179c.d5cbd389.js b/assets/js/fbaf179c.d5cbd389.js new file mode 100644 index 000000000..a37514ff7 --- /dev/null +++ b/assets/js/fbaf179c.d5cbd389.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[6490],{9241:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>n,toc:()=>u});var n=a(797),i=a(6070),r=a(8591);const l={title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",authors:["alfagun74"],tags:["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},o=void 0,s={authorsImageUrls:[void 0]},u=[{value:"GameVault's new metadata provider strategy",id:"gamevaults-new-metadata-provider-strategy",level:2},{value:"Temporary solution: Implementing a RAWG replacement",id:"temporary-solution-implementing-a-rawg-replacement",level:2},{value:"Exciting new features",id:"exciting-new-features",level:2},{value:"Supporting GameVault",id:"supporting-gamevault",level:2}];function d(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Hey everyone!"}),"\n",(0,i.jsxs)(t.p,{children:["In our last post we mentioned the challenges we've been facing with the videogame metadata database we've been using, ",(0,i.jsx)(t.a,{href:"https://rawg.io/",children:"rawg.io"}),". Unfortunately, it's become an unmaintained abandonware, causing frequent downtime and issues like incorrect search results and registration problems. The situation peaked on May 5th when the service went down completely for a day."]}),"\n",(0,i.jsx)(t.h2,{id:"gamevaults-new-metadata-provider-strategy",children:"GameVault's new metadata provider strategy"}),"\n",(0,i.jsx)(t.p,{children:"To address these issues, we're making significant changes to GameVault's metadata system. Our goal is to make GameVault metadata provider agnostic, allowing users to seamlessly plug in their preferred metadata provider."}),"\n",(0,i.jsx)(t.p,{children:"We're also excited to announce our official partnership with IGDB (twitch.tv), a trusted video game database. Going forward, GameVault will primarily use IGDB's APIs out of the box."}),"\n",(0,i.jsxs)(t.p,{children:["More details on our plans can be found in this ",(0,i.jsx)(t.a,{href:"https://github.com/Phalcode/gamevault-backend/issues/258",children:"GitHub ticket"}),". We also plan to continue supporting the use of your own API keys and other vendors."]}),"\n",(0,i.jsx)(t.p,{children:"However, as decided in our recent poll, we will be removing all support for RAWG."}),"\n",(0,i.jsx)(t.h2,{id:"temporary-solution-implementing-a-rawg-replacement",children:"Temporary solution: Implementing a RAWG replacement"}),"\n",(0,i.jsxs)(t.p,{children:["However, implementing these changes will take time, and we are both currently busy with work commitments and travel plans. So what happens if RAWG suddenly stops working while we're away? To address this concern, ",(0,i.jsx)(t.a,{href:"https://github.com/Toylerrr",children:"Toylerrr"}),", one of our most valuable community members, had a great idea. He began developing a solution that would be a drop-in replacement for RAWG. An application that mimicked the behavior of RAWG, but fetched data from Steam instead. All you have to do is replace the url in the ",(0,i.jsx)(t.code,{children:"RAWG_API_URL"})," environmental variable."]}),"\n",(0,i.jsxs)(t.p,{children:["We loved the idea and built on it. Introducing ",(0,i.jsx)(t.a,{href:"https://github.com/Phalcode/rawg-to-steam-redirect",children:"rawg-to-steam-redirect"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"The link above explains how it works and how you can use it today."}),"\n",(0,i.jsx)(t.p,{children:"What we liked most about it is that it required minimal backend changes to integrate. We have already tested this solution on our 667 games server and it works great. The quality of box art for example is much better. One drawback is that Steam does not have a lot of tags in its API."}),"\n",(0,i.jsxs)(t.p,{children:["While ",(0,i.jsx)(t.code,{children:"https://api.rawg.io/api"})," will remain the default ",(0,i.jsx)(t.code,{children:"RAWG_API_URL"})," for now, you can switch between RAWG and the new solution at any time. Just make sure your GameVault backend is updated to at least v12.1.0."]}),"\n",(0,i.jsx)(t.h2,{id:"exciting-new-features",children:"Exciting new features"}),"\n",(0,i.jsx)(t.p,{children:"In addition to these changes, we're excited to introduce you to some new features that were recently released:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"\ud83d\udd16 Bookmarking Video Games:"})," You can now bookmark your favorite games within GameVault."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"\u23ef\ufe0f Download Management:"})," GameVault now supports pausing, auto-resuming, and resuming downloads."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"\ud83d\udd12 Encrypted Archives:"})," GameVault now supports password protected archives."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"We hope these updates will make your experience with GameVault even better as we move through this transition period."}),"\n",(0,i.jsx)(t.h2,{id:"supporting-gamevault",children:"Supporting GameVault"}),"\n",(0,i.jsx)(t.p,{children:"Finally, we want to thank all of you for making all of this possible. If you have not already done so, please consider upgrading to GameVault+ to flex with animated profile pictures on your server. We would really appreciate it. Bet you can't find the GameVault+ easter egg though... \ud83d\ude09"}),"\n",(0,i.jsx)(t.p,{children:"With love,"}),"\n",(0,i.jsx)(t.p,{children:"Phalcode"})]})}function m(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>l,x:()=>o});var n=a(758);const i={},r=n.createContext(i);function l(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),n.createElement(r.Provider,{value:t},e.children)}},797:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/05/07/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-05-07.md","source":"@site/blog/2024-05-07.md","title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","description":"Hey everyone!","date":"2024-05-07T00:00:00.000Z","tags":[{"inline":true,"label":"game","permalink":"/blog/tags/game"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"database","permalink":"/blog/tags/database"},{"inline":true,"label":"videogame","permalink":"/blog/tags/videogame"},{"inline":true,"label":"RAWG","permalink":"/blog/tags/rawg"},{"inline":true,"label":"IGDB","permalink":"/blog/tags/igdb"},{"inline":true,"label":"twitch.tv","permalink":"/blog/tags/twitch-tv"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"partnership","permalink":"/blog/tags/partnership"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"solution","permalink":"/blog/tags/solution"},{"inline":true,"label":"Steam","permalink":"/blog/tags/steam"},{"inline":true,"label":"backend","permalink":"/blog/tags/backend"},{"inline":true,"label":"update","permalink":"/blog/tags/update"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"easter egg","permalink":"/blog/tags/easter-egg"}],"readingTime":2.525,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","authors":["alfagun74"],"tags":["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},"unlisted":false,"prevItem":{"title":"An update so major, we could have built the product from scratch.","permalink":"/blog/2024/10/20/"},"nextItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"}}')}}]); \ No newline at end of file diff --git a/assets/js/fcad5cc1.fdbd4ec6.js b/assets/js/fcad5cc1.09b6310f.js similarity index 84% rename from assets/js/fcad5cc1.fdbd4ec6.js rename to assets/js/fcad5cc1.09b6310f.js index 5725c78cc..57f3fe5f0 100644 --- a/assets/js/fcad5cc1.fdbd4ec6.js +++ b/assets/js/fcad5cc1.09b6310f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3025],{7280:e=>{e.exports=JSON.parse('{"tag":{"label":"development","permalink":"/blog/tags/development","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9921],{5176:e=>{e.exports=JSON.parse('{"tag":{"label":"development","permalink":"/blog/tags/development","allTagsPath":"/blog/tags","count":3,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/development","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/fe2b2ad8.0b6462ba.js b/assets/js/fe2b2ad8.0b6462ba.js new file mode 100644 index 000000000..db30a3d3b --- /dev/null +++ b/assets/js/fe2b2ad8.0b6462ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1219],{1835:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>n,toc:()=>u});var n=a(797),l=a(6070),i=a(8591);const r={title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",authors:["alfagun74"],tags:["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},o=void 0,s={authorsImageUrls:[void 0]},u=[];function g(e){const t={a:"a",p:"p",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.p,{children:"Hey everyone!"}),"\n",(0,l.jsxs)(t.p,{children:["In our last post we mentioned the challenges we've been facing with the videogame metadata database we've been using, ",(0,l.jsx)(t.a,{href:"https://rawg.io/",children:"rawg.io"}),". Unfortunately, it's become an unmaintained abandonware, causing frequent downtime and issues like incorrect search results and registration problems."]})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(g,{...e})}):g(e)}},8591:(e,t,a)=>{a.d(t,{R:()=>r,x:()=>o});var n=a(758);const l={},i=n.createContext(l);function r(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),n.createElement(i.Provider,{value:t},e.children)}},797:e=>{e.exports=JSON.parse('{"permalink":"/blog/2024/05/07/","editUrl":"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-05-07.md","source":"@site/blog/2024-05-07.md","title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","description":"Hey everyone!","date":"2024-05-07T00:00:00.000Z","tags":[{"inline":true,"label":"game","permalink":"/blog/tags/game"},{"inline":true,"label":"metadata","permalink":"/blog/tags/metadata"},{"inline":true,"label":"database","permalink":"/blog/tags/database"},{"inline":true,"label":"videogame","permalink":"/blog/tags/videogame"},{"inline":true,"label":"RAWG","permalink":"/blog/tags/rawg"},{"inline":true,"label":"IGDB","permalink":"/blog/tags/igdb"},{"inline":true,"label":"twitch.tv","permalink":"/blog/tags/twitch-tv"},{"inline":true,"label":"API","permalink":"/blog/tags/api"},{"inline":true,"label":"partnership","permalink":"/blog/tags/partnership"},{"inline":true,"label":"community","permalink":"/blog/tags/community"},{"inline":true,"label":"solution","permalink":"/blog/tags/solution"},{"inline":true,"label":"Steam","permalink":"/blog/tags/steam"},{"inline":true,"label":"backend","permalink":"/blog/tags/backend"},{"inline":true,"label":"update","permalink":"/blog/tags/update"},{"inline":true,"label":"features","permalink":"/blog/tags/features"},{"inline":true,"label":"GameVault","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"GameVault+","permalink":"/blog/tags/game-vault"},{"inline":true,"label":"easter egg","permalink":"/blog/tags/easter-egg"}],"readingTime":2.525,"hasTruncateMarker":true,"authors":[{"name":"Alper Alkan","title":"Co-Founder of Phalcode","url":"https://github.com/Alfagun74","imageURL":"https://github.com/Alfagun74.png","key":"alfagun74","page":null}],"frontMatter":{"title":"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!","authors":["alfagun74"],"tags":["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},"unlisted":false,"prevItem":{"title":"An update so major, we could have built the product from scratch.","permalink":"/blog/2024/10/20/"},"nextItem":{"title":"GameVault+ out now","permalink":"/blog/2024/04/14/"}}')}}]); \ No newline at end of file diff --git a/assets/js/fe2b2ad8.5be3f56b.js b/assets/js/fe2b2ad8.5be3f56b.js deleted file mode 100644 index 13400e5e3..000000000 --- a/assets/js/fe2b2ad8.5be3f56b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4907],{5216:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>g});var n=t(2676),l=t(8358);const i={title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",authors:["alfagun74"],tags:["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},o=void 0,r={permalink:"/blog/2024/05/07/",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master/blog/2024-05-07.md",source:"@site/blog/2024-05-07.md",title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",description:"Hey everyone!",date:"2024-05-07T00:00:00.000Z",tags:[{inline:!0,label:"game",permalink:"/blog/tags/game"},{inline:!0,label:"metadata",permalink:"/blog/tags/metadata"},{inline:!0,label:"database",permalink:"/blog/tags/database"},{inline:!0,label:"videogame",permalink:"/blog/tags/videogame"},{inline:!0,label:"RAWG",permalink:"/blog/tags/rawg"},{inline:!0,label:"IGDB",permalink:"/blog/tags/igdb"},{inline:!0,label:"twitch.tv",permalink:"/blog/tags/twitch-tv"},{inline:!0,label:"API",permalink:"/blog/tags/api"},{inline:!0,label:"partnership",permalink:"/blog/tags/partnership"},{inline:!0,label:"community",permalink:"/blog/tags/community"},{inline:!0,label:"solution",permalink:"/blog/tags/solution"},{inline:!0,label:"Steam",permalink:"/blog/tags/steam"},{inline:!0,label:"backend",permalink:"/blog/tags/backend"},{inline:!0,label:"update",permalink:"/blog/tags/update"},{inline:!0,label:"features",permalink:"/blog/tags/features"},{inline:!0,label:"GameVault",permalink:"/blog/tags/game-vault"},{inline:!0,label:"GameVault+",permalink:"/blog/tags/game-vault"},{inline:!0,label:"easter egg",permalink:"/blog/tags/easter-egg"}],readingTime:2.525,hasTruncateMarker:!0,authors:[{name:"Alper Alkan",title:"Co-Founder of Phalcode",url:"https://github.com/Alfagun74",imageURL:"https://github.com/Alfagun74.png",key:"alfagun74",page:null}],frontMatter:{title:"Temporary Solution to RAWG Woes, IGDB Partnership, and Exciting New Features!",authors:["alfagun74"],tags:["game","metadata","database","videogame","RAWG","IGDB","twitch.tv","API","partnership","community","solution","Steam","backend","update","features","GameVault","GameVault+","easter egg"]},unlisted:!1,prevItem:{title:"An update so major, we could have built the product from scratch.",permalink:"/blog/2024/10/20/"},nextItem:{title:"GameVault+ out now",permalink:"/blog/2024/04/14/"}},s={authorsImageUrls:[void 0]},g=[];function m(e){const a={a:"a",p:"p",...(0,l.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Hey everyone!"}),"\n",(0,n.jsxs)(a.p,{children:["In our last post we mentioned the challenges we've been facing with the videogame metadata database we've been using, ",(0,n.jsx)(a.a,{href:"https://rawg.io/",children:"rawg.io"}),". Unfortunately, it's become an unmaintained abandonware, causing frequent downtime and issues like incorrect search results and registration problems."]})]})}function u(e={}){const{wrapper:a}={...(0,l.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},8358:(e,a,t)=>{t.d(a,{Z:()=>r,a:()=>o});var n=t(5271);const l={},i=n.createContext(l);function o(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fee02ac9.5c9a73d8.js b/assets/js/fee02ac9.b9067084.js similarity index 84% rename from assets/js/fee02ac9.5c9a73d8.js rename to assets/js/fee02ac9.b9067084.js index 89fa8880b..ad999803e 100644 --- a/assets/js/fee02ac9.5c9a73d8.js +++ b/assets/js/fee02ac9.b9067084.js @@ -1 +1 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[1720],{2510:e=>{e.exports=JSON.parse('{"tag":{"label":"Council Member","permalink":"/blog/tags/council-member","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/council-member","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[3936],{9898:e=>{e.exports=JSON.parse('{"tag":{"label":"Council Member","permalink":"/blog/tags/council-member","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/council-member","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/ff51e3f1.a42a1c3f.js b/assets/js/ff51e3f1.a42a1c3f.js deleted file mode 100644 index 19a2d692d..000000000 --- a/assets/js/ff51e3f1.a42a1c3f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[9498],{5551:t=>{t.exports=JSON.parse('{"tag":{"label":"support request","permalink":"/blog/tags/support-request","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/support-request","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/ff51e3f1.befcea40.js b/assets/js/ff51e3f1.befcea40.js new file mode 100644 index 000000000..de290176a --- /dev/null +++ b/assets/js/ff51e3f1.befcea40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[4070],{257:t=>{t.exports=JSON.parse('{"tag":{"label":"support request","permalink":"/blog/tags/support-request","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/support-request","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/main.98deba46.js b/assets/js/main.98deba46.js deleted file mode 100644 index a8afb918a..000000000 --- a/assets/js/main.98deba46.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.98deba46.js.LICENSE.txt */ -(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[179],{6573:(e,t,n)=>{var r={"./prism-bash":3209,"./prism-json":1417};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6573},7297:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(5271);var r=n(4354),o=n.n(r),a=n(6887);const i={"0058b4c6":[()=>n.e(4088).then(n.t.bind(n,6462,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",6462],"007d2baa":[()=>n.e(6021).then(n.bind(n,4902)),"@site/docs/server-docs/media.md",4902],"009c376a":[()=>n.e(8847).then(n.t.bind(n,9062,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-support-4e8.json",9062],"00dfabf5":[()=>n.e(4956).then(n.t.bind(n,1410,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subscription-223.json",1410],"00fcf151":[()=>n.e(1693).then(n.t.bind(n,912,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-transparency-2c4.json",912],"013bccfd":[()=>n.e(6835).then(n.t.bind(n,8325,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-improvement-e54.json",8325],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,7484)),"@theme/BlogTagsListPage",7484],"01fcf7cb":[()=>n.e(5789).then(n.t.bind(n,8196,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-engagement-408.json",8196],"03919031":[()=>n.e(7951).then(n.t.bind(n,3868,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gratitude-944.json",3868],"04a3aba4":[()=>n.e(2873).then(n.t.bind(n,2896,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-market-analysis-e77.json",2896],"063ffaec":[()=>n.e(9399).then(n.t.bind(n,3875,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lemmy-community-launch-0dd.json",3875],"065dfc11":[()=>n.e(2314).then(n.t.bind(n,3114,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-domain-acquisition-75b.json",3114],"0748c3bc":[()=>n.e(6241).then(n.bind(n,3785)),"@site/docs/server-docs/metadata-enrichment/metadata.md",3785],"0766ce7b":[()=>n.e(6987).then(n.t.bind(n,1411,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-update-1f1.json",1411],"077db3c5":[()=>n.e(6807).then(n.t.bind(n,6380,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-client-application-update-423.json",6380],"0a27b0d0":[()=>n.e(9518).then(n.t.bind(n,3170,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-code-access-151.json",3170],"0ad562e6":[()=>n.e(2275).then(n.t.bind(n,6923,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-development-milestones-2fd.json",6923],"0b705c82":[()=>n.e(2510).then(n.bind(n,3476)),"@site/blog/2023-12-09.md",3476],"0bd541ed":[()=>n.e(4023).then(n.bind(n,7434)),"@site/blog/2023-07-19.md?truncated=true",7434],"0bfa7fcc":[()=>n.e(6071).then(n.bind(n,3533)),"@site/blog/2023-07-13.md",3533],"0c6a4732":[()=>n.e(9338).then(n.t.bind(n,1415,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-rawg-api-f4d.json",1415],"0d3164f5":[()=>n.e(4649).then(n.t.bind(n,5918,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-reddit-forum-6ca.json",5918],"0e384e19":[()=>n.e(9671).then(n.bind(n,4816)),"@site/docs/intro.md",4816],"10d38074":[()=>n.e(8823).then(n.t.bind(n,2379,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-app-0c9.json",2379],"113d89da":[()=>n.e(9099).then(n.t.bind(n,1707,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-spreading-the-word-793.json",1707],"1334883d":[()=>n.e(4895).then(n.t.bind(n,7574,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-safe-environment-fa4.json",7574],"14b6aafb":[()=>n.e(8495).then(n.bind(n,5479)),"@site/docs/server-docs/adding-games.md",5479],"1630eae8":[()=>n.e(1105).then(n.bind(n,943)),"@site/docs/server-docs/setup/truenas-scale.md",943],17896441:[()=>Promise.all([n.e(532),n.e(6493),n.e(7918)]).then(n.bind(n,4863)),"@theme/DocItem",4863],18747338:[()=>n.e(7919).then(n.t.bind(n,6444,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-channel-e8c.json",6444],"18d9fd7d":[()=>n.e(2002).then(n.bind(n,4485)),"@site/docs/server-docs/plugins.md",4485],"193fe191":[()=>n.e(7459).then(n.bind(n,3323)),"@site/docs/server-docs/metadata-enrichment/provider-igdb.md",3323],"19e4f252":[()=>n.e(3488).then(n.t.bind(n,8201,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subreddit-migration-749.json",8201],"1dd5d307":[()=>n.e(9418).then(n.t.bind(n,4759,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-3e5.json",4759],"1e0a1681":[()=>n.e(1420).then(n.bind(n,7547)),"@site/docs/server-docs/setup/synology-container-manager.md",7547],"1ff343c8":[()=>n.e(2980).then(n.t.bind(n,4019,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-simplifying-game-installation-c9f.json",4019],"2024b8b1":[()=>n.e(7596).then(n.bind(n,4169)),"@site/blog/2023-07-29.md?truncated=true",4169],"204759e4":[()=>n.e(2337).then(n.t.bind(n,6577,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-partnership-7e9.json",6577],20661643:[()=>n.e(8953).then(n.t.bind(n,5268,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-tech-progress-c60.json",5268],"2296bbef":[()=>n.e(6623).then(n.t.bind(n,5205,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hybrid-model-384.json",5205],"23a0eab7":[()=>n.e(5773).then(n.t.bind(n,9169,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-source-available-software-761.json",9169],"24c2f136":[()=>n.e(9584).then(n.t.bind(n,9379,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-box-representation-da0.json",9379],"251cbb95":[()=>n.e(4584).then(n.t.bind(n,111,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-harassment-11d.json",111],"2608b85a":[()=>n.e(5156).then(n.t.bind(n,8964,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-negative-narratives-b3f.json",8964],"264f4708":[()=>n.e(1517).then(n.bind(n,2015)),"@site/docs/advanced-usage/early-access-program.md",2015],"26ca8ce1":[()=>n.e(3518).then(n.t.bind(n,3606,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lemmy-community-5b4.json",3606],"2a693baa":[()=>n.e(8521).then(n.t.bind(n,4413,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-control-29f.json",4413],"2aa0a660":[()=>n.e(675).then(n.t.bind(n,9980,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subscription-model-e21.json",9980],"2e008a3a":[()=>n.e(5694).then(n.bind(n,5264)),"@site/blog/2023-07-13.md?truncated=true",5264],"2f44e9f7":[()=>n.e(3357).then(n.t.bind(n,9752,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-server-promotion-03a.json",9752],"357ebdd0":[()=>n.e(69).then(n.t.bind(n,8496,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-user-participation-4a2.json",8496],"36994c47":[()=>n.e(9208).then(n.t.bind(n,4468,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",4468],"36bc9c65":[()=>n.e(6135).then(n.t.bind(n,950,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-client-update-ad5.json",950],"3a2db09e":[()=>n.e(9361).then(n.t.bind(n,7588,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-df9.json",7588],"3ac72a53":[()=>n.e(6152).then(n.t.bind(n,4937,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lemmy-forum-09e.json",4937],"3af271b3":[()=>n.e(6072).then(n.t.bind(n,4726,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-upcoming-update-894.json",4726],"3b659bf0":[()=>n.e(6635).then(n.t.bind(n,1069,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-logo-deciphering-a29.json",1069],"3bdf5af6":[()=>n.e(15).then(n.t.bind(n,551,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-notes-dea.json",551],"3f6275a8":[()=>n.e(447).then(n.t.bind(n,6195,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-bugs-30a.json",6195],"3f99d67c":[()=>n.e(1283).then(n.t.bind(n,6250,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-logo-031.json",6250],"3fc2248c":[()=>n.e(8038).then(n.t.bind(n,7029,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-feedback-110.json",7029],"3fc3119e":[()=>n.e(1362).then(n.bind(n,6189)),"@site/blog/2023-12-09.md?truncated=true",6189],"416eca3f":[()=>n.e(4517).then(n.t.bind(n,3949,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-age-restrictions-5d3.json",3949],"41e301a0":[()=>n.e(3712).then(n.t.bind(n,5581,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-trolls-732.json",5581],"435302bb":[()=>n.e(2126).then(n.bind(n,5076)),"@site/docs/client-docs/how-to-use.md",5076],"438c7fa2":[()=>n.e(1601).then(n.bind(n,5729)),"@site/docs/server-docs/server-news.md",5729],"4534f50b":[()=>n.e(7253).then(n.t.bind(n,3695,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-threats-86b.json",3695],"46e7f252":[()=>n.e(9190).then(n.t.bind(n,6312,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-metadata-b2d.json",6312],"47aca6da":[()=>n.e(3465).then(n.bind(n,3692)),"@site/blog/2024-04-01/2024-04-01.md?truncated=true",3692],"4a631206":[()=>n.e(7937).then(n.bind(n,6226)),"@site/docs/server-docs/updating-games.md",6226],"4a6974fe":[()=>n.e(6634).then(n.bind(n,1693)),"@site/blog/2024-04-01/2024-04-01.md",1693],"4d393b3e":[()=>n.e(9155).then(n.bind(n,2197)),"@site/docs/server-docs/backup-and-restore.md",2197],"4e01c0f4":[()=>n.e(3198).then(n.t.bind(n,4615,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-platform-b8a.json",4615],"4efd7f8f":[()=>n.e(9950).then(n.t.bind(n,3665,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-exclusive-preview-10f.json",3665],"4f991444":[()=>n.e(1271).then(n.t.bind(n,774,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-updates-c8d.json",774],"4fb3dfba":[()=>n.e(428).then(n.t.bind(n,6389,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-backend-application-migration-545.json",6389],"4ff7c2f7":[()=>n.e(8565).then(n.t.bind(n,7479,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-hub-801.json",7479],"500e67e3":[()=>n.e(5724).then(n.t.bind(n,4617,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-poll-results-c1e.json",4617],"5046667d":[()=>n.e(4275).then(n.bind(n,1575)),"@site/docs/server-docs/websockets.md",1575],"51e7bf36":[()=>n.e(7146).then(n.bind(n,7520)),"@site/docs/client-docs/data.md",7520],"51fa4cf1":[()=>n.e(5501).then(n.t.bind(n,5318,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-stash-816.json",5318],"524a34e7":[()=>n.e(6953).then(n.t.bind(n,2478,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-harbor-82c.json",2478],"534e7ef5":[()=>n.e(2834).then(n.t.bind(n,2583,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subscription-to-updates-role-792.json",2583],"55dfe132":[()=>n.e(5487).then(n.bind(n,4773)),"@site/blog/2023-11-20.md",4773],"573c7c88":[()=>n.e(8846).then(n.t.bind(n,6983,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-self-hosted-newsletter-6aa.json",6983],"591d17b8":[()=>n.e(8218).then(n.t.bind(n,1880,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-microsoft-store-publication-729.json",1880],"5a2f6c5d":[()=>n.e(2158).then(n.t.bind(n,6888,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-microsoft-store-736.json",6888],"5a8f8fa9":[()=>n.e(8346).then(n.t.bind(n,7698,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-installation-pipeline-ebc.json",7698],"5ac1a9ec":[()=>n.e(2518).then(n.t.bind(n,139,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-alternative-214.json",139],"5baa483a":[()=>n.e(9006).then(n.t.bind(n,5735,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-speculation-a41.json",5735],"5bbd8cf3":[()=>n.e(8912).then(n.t.bind(n,7288,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-kanban-board-262.json",7288],"5c99339f":[()=>n.e(7283).then(n.t.bind(n,9948,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-backend-c70.json",9948],"5db30e8c":[()=>n.e(7044).then(n.t.bind(n,9692,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-self-hosted-4fa.json",9692],"5e5c84c3":[()=>n.e(8516).then(n.bind(n,2836)),"@site/docs/server-docs/game-types.md",2836],"5e95c892":[()=>n.e(9661).then(n.bind(n,5970)),"@theme/DocsRoot",5970],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5fa82f91":[()=>n.e(4503).then(n.t.bind(n,1722,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-shelf-102.json",1722],"61be0f73":[()=>n.e(452).then(n.bind(n,5931)),"@site/docs/server-docs/structure.md",5931],"621db11d":[()=>Promise.all([n.e(532),n.e(2091),n.e(3940)]).then(n.bind(n,3435)),"@theme/Blog/Pages/BlogAuthorsListPage",3435],"63511f3c":[()=>n.e(5044).then(n.t.bind(n,7337,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-decision-making-c62.json",7337],"63b46e50":[()=>n.e(4819).then(n.t.bind(n,4881,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-health-monitoring-c3c.json",4881],"6535206c":[()=>n.e(3020).then(n.t.bind(n,3480,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-app-name-migration-54a.json",3480],"66e9ef90":[()=>n.e(786).then(n.t.bind(n,9746,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-analytics-43c.json",9746],"678c8d60":[()=>n.e(4430).then(n.t.bind(n,9939,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-drm-free-games-d6f.json",9939],"6875c492":[()=>Promise.all([n.e(532),n.e(6493),n.e(2091),n.e(8610)]).then(n.bind(n,8078)),"@theme/BlogTagsPostsPage",8078],"6a40fd04":[()=>n.e(5736).then(n.t.bind(n,3599,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-renaming-app-716.json",3599],"6bbbce94":[()=>n.e(2639).then(n.t.bind(n,2976,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-family-friendly-d7c.json",2976],"6e64f266":[()=>n.e(5781).then(n.t.bind(n,8076,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-documentation-migration-461.json",8076],"6ff2a8aa":[()=>n.e(7773).then(n.t.bind(n,1399,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-poll-55a.json",1399],"71f025ea":[()=>n.e(121).then(n.t.bind(n,389,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-driven-c68.json",389],"71f72e4c":[()=>n.e(7523).then(n.t.bind(n,5572,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-updates-66c.json",5572],"73ad9a8e":[()=>n.e(9096).then(n.t.bind(n,136,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-theme-b53.json",136],"7424d9c3":[()=>n.e(9268).then(n.bind(n,2903)),"@site/blog/2023-07-08.md",2903],"7486ddfc":[()=>n.e(8437).then(n.t.bind(n,7734,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-november-update-7a2.json",7734],"7489ed02":[()=>n.e(6515).then(n.bind(n,1173)),"@site/blog/2023-07-01.md?truncated=true",1173],"751a244a":[()=>n.e(9041).then(n.t.bind(n,2108,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-management-84a.json",2108],"7558b7a2":[()=>n.e(4327).then(n.t.bind(n,1416,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-transition-process-04a.json",1416],"7576ca6a":[()=>n.e(3236).then(n.t.bind(n,6467,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-video-games-c79.json",6467],"7754063d":[()=>n.e(3116).then(n.t.bind(n,1552,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-journey-706.json",1552],"77a8abe0":[()=>n.e(9348).then(n.t.bind(n,134,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-continued-support-22f.json",134],"77f7e459":[()=>n.e(5805).then(n.t.bind(n,9919,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-git-hub-issue-e5d.json",9919],"7864c493":[()=>n.e(111).then(n.t.bind(n,2941,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-blackmail-b61.json",2941],"7a0110f5":[()=>n.e(2777).then(n.t.bind(n,330,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-platform-8e2.json",330],"7b99d5ba":[()=>n.e(1383).then(n.bind(n,5538)),"@site/blog/2023-07-09.md?truncated=true",5538],"7c4a7780":[()=>n.e(5074).then(n.t.bind(n,6765,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-experience-d09.json",6765],"7ef69c2b":[()=>n.e(7020).then(n.bind(n,7534)),"@site/blog/2024-10-20.md?truncated=true",7534],80292675:[()=>n.e(6487).then(n.bind(n,6905)),"@site/docs/server-docs/setup/unraid.md",6905],"80404bfe":[()=>n.e(962).then(n.t.bind(n,4600,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-feature-requests-f1b.json",4600],"805ec11d":[()=>n.e(5164).then(n.t.bind(n,3342,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-server-update-54e.json",3342],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8167ef7e":[()=>n.e(241).then(n.t.bind(n,7497,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-developers-001.json",7497],"82c81335":[()=>n.e(4251).then(n.t.bind(n,8576,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-testing-29d.json",8576],"8577c450":[()=>n.e(2561).then(n.t.bind(n,8283,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-spam-cff.json",8283],"8795eea9":[()=>n.e(1053).then(n.bind(n,8671)),"@site/blog/2023-07-20.md?truncated=true",8671],"87cefd36":[()=>n.e(5240).then(n.t.bind(n,6623,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-cloud-based-game-platforms-ee3.json",6623],"8852925a":[()=>n.e(7964).then(n.t.bind(n,2805,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-name-announcement-577.json",2805],"886fdd87":[()=>n.e(6927).then(n.t.bind(n,2070,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-git-hub-b4b.json",2070],"89db6d1d":[()=>n.e(5855).then(n.bind(n,9402)),"@site/blog/2023-07-15.md?truncated=true",9402],"8a3716b4":[()=>n.e(5059).then(n.t.bind(n,7858,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-metadata-framework-ab4.json",7858],"8a3c85db":[()=>n.e(235).then(n.t.bind(n,6381,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-domain-161.json",6381],"8b8fd5aa":[()=>n.e(1151).then(n.t.bind(n,393,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-polls-463.json",393],"8ba18f4f":[()=>n.e(147).then(n.bind(n,8508)),"@site/docs/server-docs/parental-control.md",8508],"8c4108df":[()=>n.e(4145).then(n.bind(n,9287)),"@site/docs/server-docs/setup/docker-compose.md",9287],"8e064018":[()=>n.e(1691).then(n.t.bind(n,7614,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-celebration-of-achievements-856.json",7614],"8ea09047":[()=>n.e(8644).then(n.t.bind(n,7362,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-page-2-433.json",7362],"8f8e2e78":[()=>n.e(8407).then(n.t.bind(n,5016,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-future-development-ef2.json",5016],"8ff99662":[()=>n.e(8489).then(n.t.bind(n,4233,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-app-80a.json",4233],"9019cc36":[()=>n.e(9565).then(n.bind(n,2716)),"@site/blog/2024-10-20.md",2716],"9046e000":[()=>n.e(2650).then(n.t.bind(n,9205,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-solution-4b2.json",9205],"9147d3af":[()=>n.e(5954).then(n.bind(n,8248)),"@site/blog/2024-03-28.md?truncated=true",8248],"915cb6f7":[()=>n.e(4509).then(n.t.bind(n,5532,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-april-fools-1f0.json",5532],92440753:[()=>n.e(3439).then(n.t.bind(n,8819,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-financial-assistance-4b1.json",8819],"92fb1dcd":[()=>n.e(2908).then(n.t.bind(n,6583,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-roadmap-e35.json",6583],"9404f843":[()=>n.e(4811).then(n.bind(n,7130)),"@site/docs/gamevault-plus/client-apis.md",7130],"9748c478":[()=>n.e(7807).then(n.bind(n,3326)),"@site/blog/2023-07-15.md",3326],"979ccdb6":[()=>n.e(9264).then(n.t.bind(n,4668,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-racist-e34.json",4668],"99d3d5ac":[()=>n.e(5150).then(n.t.bind(n,9782,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-development-d1f.json",9782],"99f2b7e6":[()=>n.e(7546).then(n.t.bind(n,8222,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-twitch-tv-219.json",8222],"9b1663d8":[()=>n.e(6497).then(n.t.bind(n,2022,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-66f.json",2022],"9b95b357":[()=>n.e(2942).then(n.t.bind(n,4133,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-servers-279.json",4133],"9d5a95a9":[()=>n.e(8023).then(n.t.bind(n,1272,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-igdb-8f8.json",1272],"9d86e7fa":[()=>n.e(7508).then(n.t.bind(n,1629,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-announcement-97a.json",1629],"9d9f8394":[()=>n.e(9360).then(n.bind(n,5465)),"@site/docs/troubleshooting.md",5465],"9e4087bc":[()=>n.e(3608).then(n.bind(n,7579)),"@theme/BlogArchivePage",7579],"9e75d8bf":[()=>n.e(8444).then(n.t.bind(n,2611,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-platform-values-e98.json",2611],"9fafd272":[()=>n.e(8666).then(n.t.bind(n,6839,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-50c.json",6839],a1072f2a:[()=>n.e(7650).then(n.bind(n,1674)),"@site/docs/client-docs/gui.md",1674],a1216fa4:[()=>n.e(5662).then(n.bind(n,6746)),"@site/blog/2023-07-24.md",6746],a1f57275:[()=>n.e(5325).then(n.bind(n,2688)),"@site/blog/2023-07-01.md",2688],a3fd4b44:[()=>n.e(9303).then(n.t.bind(n,9921,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-file-server-7d3.json",9921],a67f6c3e:[()=>n.e(2999).then(n.t.bind(n,8758,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-videogame-96d.json",8758],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(6493),n.e(2091),n.e(3089)]).then(n.bind(n,8602)),"@theme/BlogListPage",8602],a6fed517:[()=>n.e(4884).then(n.t.bind(n,3063,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-database-781.json",3063],a7456010:[()=>n.e(5980).then(n.t.bind(n,9365,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",9365],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,2767)),"@theme/DocVersionRoot",2767],a7d982d4:[()=>n.e(4691).then(n.t.bind(n,66,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-e0e.json",66],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,7872)),"@theme/DocRoot",7872],ab6782ba:[()=>n.e(6003).then(n.t.bind(n,3306,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-steam-739.json",3306],aba21aa0:[()=>n.e(3629).then(n.t.bind(n,1765,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",1765],acecf23e:[()=>n.e(7393).then(n.t.bind(n,1838,19)),"~blog/default/blogMetadata-default.json",1838],aeb57253:[()=>n.e(5447).then(n.t.bind(n,4733,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-surge-of-new-users-416.json",4733],b1d7f5b9:[()=>n.e(4039).then(n.bind(n,9490)),"@site/docs/server-docs/indexing.md",9490],b28c3188:[()=>n.e(3559).then(n.bind(n,1234)),"@site/docs/server-docs/configuration.md",1234],b2ade0e8:[()=>n.e(8563).then(n.t.bind(n,1579,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-open-source-bc6.json",1579],b2c9ad8a:[()=>n.e(3680).then(n.t.bind(n,2319,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-app-optimization-286.json",2319],b4068411:[()=>n.e(8042).then(n.bind(n,176)),"@site/docs/server-docs/setup/caprover.md",176],b493ea72:[()=>n.e(4781).then(n.bind(n,9794)),"@site/blog/2023-07-20.md",9794],b7026fb3:[()=>n.e(752).then(n.bind(n,2660)),"@site/blog/2023-07-09.md",2660],b8ecf3c5:[()=>n.e(9847).then(n.bind(n,6262)),"@site/docs/client-docs/setup.md",6262],ba3af7ad:[()=>n.e(1814).then(n.bind(n,5040)),"@site/blog/2023-07-08.md?truncated=true",5040],ba57e113:[()=>n.e(5948).then(n.bind(n,2826)),"@site/docs/license-contribute.md",2826],bb12dd4d:[()=>n.e(4286).then(n.t.bind(n,1988,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-logo-concept-discussion-9f8.json",1988],bc0aa6af:[()=>n.e(8404).then(n.t.bind(n,3389,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-plugin-system-7eb.json",3389],bcc2422e:[()=>n.e(8704).then(n.t.bind(n,939,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ui-redesign-87d.json",939],bdf26d57:[()=>n.e(4452).then(n.t.bind(n,3806,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-collaboration-ed6.json",3806],c15d9823:[()=>n.e(6642).then(n.t.bind(n,2506,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-bd9.json",2506],c332f8df:[()=>n.e(8258).then(n.bind(n,8314)),"@site/blog/2023-07-19.md",8314],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,7703)),"@site/src/pages/index.js",7703],c71ef62c:[()=>n.e(2328).then(n.t.bind(n,3584,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-keyhole-representation-72c.json",3584],c7bbcbc7:[()=>n.e(2422).then(n.t.bind(n,1360,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-startup-dff.json",1360],c8472403:[()=>n.e(9710).then(n.t.bind(n,4051,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-special-thanks-d94.json",4051],c89c7974:[()=>n.e(5865).then(n.bind(n,433)),"@site/docs/advanced-usage/rest-api.md",433],c8fbe42c:[()=>n.e(8364).then(n.t.bind(n,3131,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-selfhosted-podcast-cda.json",3131],c9618c72:[()=>n.e(1472).then(n.t.bind(n,9311,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-official-installations-22e.json",9311],c9cac9d9:[()=>n.e(6325).then(n.t.bind(n,1305,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-release-6bd.json",1305],c9d2adb2:[()=>n.e(2701).then(n.bind(n,5956)),"@site/docs/gamevault-plus/client-setup.md",5956],ca2d5c98:[()=>n.e(3392).then(n.t.bind(n,9401,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-motivation-041.json",9401],cc0b9cf0:[()=>n.e(6364).then(n.t.bind(n,7587,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-source-available-927.json",7587],cc616304:[()=>n.e(717).then(n.t.bind(n,2453,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-easter-egg-364.json",2453],ccc49370:[()=>Promise.all([n.e(532),n.e(6493),n.e(2091),n.e(6103)]).then(n.bind(n,6509)),"@theme/BlogPostPage",6509],cd59c184:[()=>n.e(3112).then(n.bind(n,1634)),"@site/blog/2024-04-14.md",1634],cd781ce1:[()=>n.e(9230).then(n.t.bind(n,2343,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-voting-6d1.json",2343],cddec16f:[()=>n.e(5316).then(n.bind(n,3964)),"@site/docs/server-docs/setup/native.md",3964],cee5390f:[()=>n.e(691).then(n.t.bind(n,9724,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ui-update-5b0.json",9724],d527dda4:[()=>n.e(7416).then(n.t.bind(n,5239,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-coding-chronicle-d70.json",5239],d53cd084:[()=>n.e(3585).then(n.t.bind(n,481,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-parental-control-493.json",481],d5823966:[()=>n.e(7262).then(n.t.bind(n,6572,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-features-ebb.json",6572],d5dcebd7:[()=>n.e(187).then(n.t.bind(n,678,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-name-7a4.json",678],d6138fd2:[()=>n.e(7471).then(n.t.bind(n,4368,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-user-engagement-9c0.json",4368],d82a1228:[()=>n.e(5050).then(n.t.bind(n,8846,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-early-access-da1.json",8846],d9341347:[()=>n.e(9490).then(n.t.bind(n,7995,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-multi-user-authentication-6f6.json",7995],d9d4e1f1:[()=>n.e(5300).then(n.bind(n,8256)),"@site/blog/2023-11-20.md?truncated=true",8256],daddf69a:[()=>n.e(5548).then(n.t.bind(n,3169,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-community-bc6.json",3169],daf02673:[()=>n.e(3581).then(n.t.bind(n,6061,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-public-cb9.json",6061],db0b0363:[()=>n.e(2805).then(n.t.bind(n,8513,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-licensing-7b3.json",8513],dc8e8e39:[()=>n.e(1736).then(n.t.bind(n,2252,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-623.json",2252],dcb9a9e8:[()=>n.e(4758).then(n.bind(n,2160)),"@site/docs/advanced-usage/linux-client.md",2160],dd9b1d9d:[()=>n.e(3433).then(n.t.bind(n,836,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-success-3d9.json",836],defc3e62:[()=>n.e(4412).then(n.t.bind(n,7917,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-sustainability-369.json",7917],df8deb2d:[()=>n.e(8860).then(n.t.bind(n,9731,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-milestone-4c3.json",9731],e07621e3:[()=>n.e(6182).then(n.t.bind(n,1865,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-love-for-game-vault-828.json",1865],e0a15777:[()=>n.e(9737).then(n.t.bind(n,9859,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-revenue-generation-e31.json",9859],e0c5798e:[()=>n.e(339).then(n.bind(n,8801)),"@site/blog/2024-03-28.md",8801],e0da75fc:[()=>n.e(2656).then(n.bind(n,7282)),"@site/docs/advanced-usage/steamdeck.md",7282],e3409e91:[()=>n.e(1180).then(n.t.bind(n,3687,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-cfa.json",3687],e46b1034:[()=>n.e(386).then(n.t.bind(n,1940,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-partnerships-171.json",1940],e4878929:[()=>n.e(765).then(n.t.bind(n,1169,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-community-growth-95a.json",1169],e5c4b825:[()=>n.e(5658).then(n.t.bind(n,9564,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-migration-finalization-c0b.json",9564],e623129a:[()=>n.e(3251).then(n.t.bind(n,5569,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-future-features-136.json",5569],e6a59d41:[()=>n.e(356).then(n.bind(n,4244)),"@site/docs/server-docs/user-management.md",4244],e70842e4:[()=>n.e(5912).then(n.bind(n,4712)),"@site/blog/2024-04-14.md?truncated=true",4712],e78c2f6e:[()=>n.e(1545).then(n.t.bind(n,2415,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-creepy-behavior-daa.json",2415],e7aa45d5:[()=>n.e(9886).then(n.bind(n,3581)),"@site/blog/2023-07-29.md",3581],e935068c:[()=>n.e(8307).then(n.t.bind(n,3419,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-server-e37.json",3419],e98ed1e4:[()=>n.e(3017).then(n.t.bind(n,7459,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-name-migration-progress-68d.json",7459],e9e0f988:[()=>n.e(310).then(n.bind(n,2607)),"@site/docs/client-docs/updating-client.md",2607],e9e1de17:[()=>n.e(9473).then(n.t.bind(n,233,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-development-c0f.json",233],ec46a009:[()=>n.e(9362).then(n.bind(n,2983)),"@site/docs/gamevault-plus/introduction.md",2983],eda4f68b:[()=>n.e(9424).then(n.t.bind(n,4289,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ai-generated-names-ac1.json",4289],ee98c124:[()=>n.e(5590).then(n.bind(n,2380)),"@site/docs/advanced-usage/failt2ban.md",2380],ef8b811a:[()=>n.e(2644).then(n.t.bind(n,9441,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-790.json",9441],f2a7e769:[()=>n.e(6522).then(n.t.bind(n,5714,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-sharing-blog-posts-3f1.json",5714],f4d4319b:[()=>n.e(2500).then(n.bind(n,9550)),"@site/docs/server-docs/setup/setup.md",9550],f525eb8a:[()=>n.e(146).then(n.t.bind(n,9591,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-api-049.json",9591],f58fbef8:[()=>n.e(3066).then(n.t.bind(n,6772,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-feedback-67f.json",6772],f5b06269:[()=>n.e(5565).then(n.bind(n,9221)),"@site/docs/gamevault-plus/themes.md",9221],f677311a:[()=>n.e(857).then(n.t.bind(n,1823,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-inclusivity-cdf.json",1823],f6f174b1:[()=>n.e(7764).then(n.t.bind(n,3540,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-beta-testing-146.json",3540],f81c1134:[()=>n.e(4031).then(n.t.bind(n,4108,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-f05.json",4108],f8aea940:[()=>n.e(5961).then(n.bind(n,5799)),"@site/docs/client-docs/themes.md",5799],f94e70f3:[()=>n.e(6609).then(n.t.bind(n,7006,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-drm-free-406.json",7006],fb0a08ce:[()=>n.e(1392).then(n.bind(n,83)),"@site/blog/2023-07-24.md?truncated=true",83],fb0e7a2f:[()=>n.e(4893).then(n.t.bind(n,7641,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-rawg-6b2.json",7641],fbaf179c:[()=>n.e(4760).then(n.bind(n,3507)),"@site/blog/2024-05-07.md",3507],fcad5cc1:[()=>n.e(3025).then(n.t.bind(n,7280,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-development-c3c.json",7280],fe2b2ad8:[()=>n.e(4907).then(n.bind(n,5216)),"@site/blog/2024-05-07.md?truncated=true",5216],fee02ac9:[()=>n.e(1720).then(n.t.bind(n,2510,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-council-member-71b.json",2510],ff51e3f1:[()=>n.e(9498).then(n.t.bind(n,5551,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-support-request-58e.json",5551]};var s=n(2676);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(7346),u=n(4721);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(1649).then(n.bind(n,1649)),modules:["@theme/NotFound"],webpack:()=>[1649],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const p=[{path:"/blog",component:d("/blog","deb"),exact:!0},{path:"/blog/2023/07/01/",component:d("/blog/2023/07/01/","30b"),exact:!0},{path:"/blog/2023/07/08/",component:d("/blog/2023/07/08/","d10"),exact:!0},{path:"/blog/2023/07/09/",component:d("/blog/2023/07/09/","2c2"),exact:!0},{path:"/blog/2023/07/13/",component:d("/blog/2023/07/13/","6e5"),exact:!0},{path:"/blog/2023/07/15/",component:d("/blog/2023/07/15/","b20"),exact:!0},{path:"/blog/2023/07/19/",component:d("/blog/2023/07/19/","8a6"),exact:!0},{path:"/blog/2023/07/20/",component:d("/blog/2023/07/20/","9b6"),exact:!0},{path:"/blog/2023/07/24/",component:d("/blog/2023/07/24/","4f4"),exact:!0},{path:"/blog/2023/07/29/",component:d("/blog/2023/07/29/","44c"),exact:!0},{path:"/blog/2023/11/20/",component:d("/blog/2023/11/20/","3f2"),exact:!0},{path:"/blog/2023/12/09/",component:d("/blog/2023/12/09/","d2c"),exact:!0},{path:"/blog/2024/03/28/",component:d("/blog/2024/03/28/","60b"),exact:!0},{path:"/blog/2024/04/01/2024-04-01/",component:d("/blog/2024/04/01/2024-04-01/","59c"),exact:!0},{path:"/blog/2024/04/14/",component:d("/blog/2024/04/14/","e89"),exact:!0},{path:"/blog/2024/05/07/",component:d("/blog/2024/05/07/","2dc"),exact:!0},{path:"/blog/2024/10/20/",component:d("/blog/2024/10/20/","4e9"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","182"),exact:!0},{path:"/blog/authors",component:d("/blog/authors","0b7"),exact:!0},{path:"/blog/page/2",component:d("/blog/page/2","fd3"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","287"),exact:!0},{path:"/blog/tags/age-restrictions",component:d("/blog/tags/age-restrictions","8da"),exact:!0},{path:"/blog/tags/ai-generated-names",component:d("/blog/tags/ai-generated-names","de1"),exact:!0},{path:"/blog/tags/alternative",component:d("/blog/tags/alternative","0cb"),exact:!0},{path:"/blog/tags/analytics",component:d("/blog/tags/analytics","105"),exact:!0},{path:"/blog/tags/announcement",component:d("/blog/tags/announcement","3ab"),exact:!0},{path:"/blog/tags/api",component:d("/blog/tags/api","d97"),exact:!0},{path:"/blog/tags/app",component:d("/blog/tags/app","f50"),exact:!0},{path:"/blog/tags/app-name-migration",component:d("/blog/tags/app-name-migration","b3d"),exact:!0},{path:"/blog/tags/app-optimization",component:d("/blog/tags/app-optimization","4b7"),exact:!0},{path:"/blog/tags/april-fools",component:d("/blog/tags/april-fools","45b"),exact:!0},{path:"/blog/tags/backend",component:d("/blog/tags/backend","bc5"),exact:!0},{path:"/blog/tags/backend-application-migration",component:d("/blog/tags/backend-application-migration","ea3"),exact:!0},{path:"/blog/tags/beta-testing",component:d("/blog/tags/beta-testing","8e3"),exact:!0},{path:"/blog/tags/blackmail",component:d("/blog/tags/blackmail","2a4"),exact:!0},{path:"/blog/tags/box-representation",component:d("/blog/tags/box-representation","400"),exact:!0},{path:"/blog/tags/bugs",component:d("/blog/tags/bugs","ff5"),exact:!0},{path:"/blog/tags/celebration-of-achievements",component:d("/blog/tags/celebration-of-achievements","f97"),exact:!0},{path:"/blog/tags/client-application-update",component:d("/blog/tags/client-application-update","45e"),exact:!0},{path:"/blog/tags/client-update",component:d("/blog/tags/client-update","d5b"),exact:!0},{path:"/blog/tags/cloud-based-game-platforms",component:d("/blog/tags/cloud-based-game-platforms","a94"),exact:!0},{path:"/blog/tags/code-access",component:d("/blog/tags/code-access","1ef"),exact:!0},{path:"/blog/tags/coding-chronicle",component:d("/blog/tags/coding-chronicle","d18"),exact:!0},{path:"/blog/tags/collaboration",component:d("/blog/tags/collaboration","f74"),exact:!0},{path:"/blog/tags/community",component:d("/blog/tags/community","e39"),exact:!0},{path:"/blog/tags/community-driven",component:d("/blog/tags/community-driven","63b"),exact:!0},{path:"/blog/tags/community-feedback",component:d("/blog/tags/community-feedback","3ee"),exact:!0},{path:"/blog/tags/community-management",component:d("/blog/tags/community-management","93f"),exact:!0},{path:"/blog/tags/continued-support",component:d("/blog/tags/continued-support","afc"),exact:!0},{path:"/blog/tags/control",component:d("/blog/tags/control","04d"),exact:!0},{path:"/blog/tags/council-member",component:d("/blog/tags/council-member","a6a"),exact:!0},{path:"/blog/tags/creepy-behavior",component:d("/blog/tags/creepy-behavior","090"),exact:!0},{path:"/blog/tags/database",component:d("/blog/tags/database","ff5"),exact:!0},{path:"/blog/tags/decision-making",component:d("/blog/tags/decision-making","532"),exact:!0},{path:"/blog/tags/developers",component:d("/blog/tags/developers","487"),exact:!0},{path:"/blog/tags/development",component:d("/blog/tags/development","b27"),exact:!0},{path:"/blog/tags/development-milestones",component:d("/blog/tags/development-milestones","1c9"),exact:!0},{path:"/blog/tags/discord",component:d("/blog/tags/discord","6df"),exact:!0},{path:"/blog/tags/discord-channel",component:d("/blog/tags/discord-channel","b2d"),exact:!0},{path:"/blog/tags/discord-community-growth",component:d("/blog/tags/discord-community-growth","136"),exact:!0},{path:"/blog/tags/discord-server",component:d("/blog/tags/discord-server","e4d"),exact:!0},{path:"/blog/tags/discord-server-promotion",component:d("/blog/tags/discord-server-promotion","f55"),exact:!0},{path:"/blog/tags/documentation-migration",component:d("/blog/tags/documentation-migration","405"),exact:!0},{path:"/blog/tags/domain-acquisition",component:d("/blog/tags/domain-acquisition","e1a"),exact:!0},{path:"/blog/tags/drm-free",component:d("/blog/tags/drm-free","c7e"),exact:!0},{path:"/blog/tags/drm-free-games",component:d("/blog/tags/drm-free-games","6cf"),exact:!0},{path:"/blog/tags/early-access",component:d("/blog/tags/early-access","ed5"),exact:!0},{path:"/blog/tags/easter-egg",component:d("/blog/tags/easter-egg","7c7"),exact:!0},{path:"/blog/tags/engagement",component:d("/blog/tags/engagement","b3b"),exact:!0},{path:"/blog/tags/exclusive-preview",component:d("/blog/tags/exclusive-preview","0fe"),exact:!0},{path:"/blog/tags/family-friendly",component:d("/blog/tags/family-friendly","282"),exact:!0},{path:"/blog/tags/feature-requests",component:d("/blog/tags/feature-requests","61d"),exact:!0},{path:"/blog/tags/features",component:d("/blog/tags/features","3d5"),exact:!0},{path:"/blog/tags/feedback",component:d("/blog/tags/feedback","a81"),exact:!0},{path:"/blog/tags/file-server",component:d("/blog/tags/file-server","f0b"),exact:!0},{path:"/blog/tags/financial-assistance",component:d("/blog/tags/financial-assistance","e64"),exact:!0},{path:"/blog/tags/future-development",component:d("/blog/tags/future-development","db0"),exact:!0},{path:"/blog/tags/future-features",component:d("/blog/tags/future-features","bed"),exact:!0},{path:"/blog/tags/game",component:d("/blog/tags/game","a29"),exact:!0},{path:"/blog/tags/game-development",component:d("/blog/tags/game-development","97c"),exact:!0},{path:"/blog/tags/game-hub",component:d("/blog/tags/game-hub","6c3"),exact:!0},{path:"/blog/tags/game-shelf",component:d("/blog/tags/game-shelf","566"),exact:!0},{path:"/blog/tags/game-stash",component:d("/blog/tags/game-stash","728"),exact:!0},{path:"/blog/tags/game-vault",component:d("/blog/tags/game-vault","39f"),exact:!0},{path:"/blog/tags/game-vault-app",component:d("/blog/tags/game-vault-app","bd6"),exact:!0},{path:"/blog/tags/game-vault-domain",component:d("/blog/tags/game-vault-domain","a5b"),exact:!0},{path:"/blog/tags/game-vault-journey",component:d("/blog/tags/game-vault-journey","52d"),exact:!0},{path:"/blog/tags/game-vault-milestone",component:d("/blog/tags/game-vault-milestone","030"),exact:!0},{path:"/blog/tags/gaming",component:d("/blog/tags/gaming","2b9"),exact:!0},{path:"/blog/tags/gaming-community",component:d("/blog/tags/gaming-community","73c"),exact:!0},{path:"/blog/tags/gaming-experience",component:d("/blog/tags/gaming-experience","f8c"),exact:!0},{path:"/blog/tags/gaming-platform",component:d("/blog/tags/gaming-platform","12f"),exact:!0},{path:"/blog/tags/gaming-servers",component:d("/blog/tags/gaming-servers","e66"),exact:!0},{path:"/blog/tags/git-hub",component:d("/blog/tags/git-hub","590"),exact:!0},{path:"/blog/tags/git-hub-issue",component:d("/blog/tags/git-hub-issue","8a0"),exact:!0},{path:"/blog/tags/gratitude",component:d("/blog/tags/gratitude","1d7"),exact:!0},{path:"/blog/tags/harassment",component:d("/blog/tags/harassment","89d"),exact:!0},{path:"/blog/tags/harbor",component:d("/blog/tags/harbor","a9f"),exact:!0},{path:"/blog/tags/health-monitoring",component:d("/blog/tags/health-monitoring","d88"),exact:!0},{path:"/blog/tags/hybrid-model",component:d("/blog/tags/hybrid-model","038"),exact:!0},{path:"/blog/tags/igdb",component:d("/blog/tags/igdb","6ff"),exact:!0},{path:"/blog/tags/improvement",component:d("/blog/tags/improvement","0af"),exact:!0},{path:"/blog/tags/inclusivity",component:d("/blog/tags/inclusivity","7a0"),exact:!0},{path:"/blog/tags/installation-pipeline",component:d("/blog/tags/installation-pipeline","94b"),exact:!0},{path:"/blog/tags/kanban-board",component:d("/blog/tags/kanban-board","372"),exact:!0},{path:"/blog/tags/keyhole-representation",component:d("/blog/tags/keyhole-representation","ae7"),exact:!0},{path:"/blog/tags/lemmy-community",component:d("/blog/tags/lemmy-community","a2d"),exact:!0},{path:"/blog/tags/lemmy-community-launch",component:d("/blog/tags/lemmy-community-launch","9dd"),exact:!0},{path:"/blog/tags/lemmy-forum",component:d("/blog/tags/lemmy-forum","7bd"),exact:!0},{path:"/blog/tags/logo-concept-discussion",component:d("/blog/tags/logo-concept-discussion","7e7"),exact:!0},{path:"/blog/tags/logo-deciphering",component:d("/blog/tags/logo-deciphering","dc4"),exact:!0},{path:"/blog/tags/love-for-game-vault",component:d("/blog/tags/love-for-game-vault","2f9"),exact:!0},{path:"/blog/tags/market-analysis",component:d("/blog/tags/market-analysis","c1c"),exact:!0},{path:"/blog/tags/metadata",component:d("/blog/tags/metadata","2c9"),exact:!0},{path:"/blog/tags/metadata-framework",component:d("/blog/tags/metadata-framework","bc5"),exact:!0},{path:"/blog/tags/microsoft-store",component:d("/blog/tags/microsoft-store","cc8"),exact:!0},{path:"/blog/tags/microsoft-store-publication",component:d("/blog/tags/microsoft-store-publication","a3d"),exact:!0},{path:"/blog/tags/migration-finalization",component:d("/blog/tags/migration-finalization","138"),exact:!0},{path:"/blog/tags/motivation",component:d("/blog/tags/motivation","8c7"),exact:!0},{path:"/blog/tags/multi-user-authentication",component:d("/blog/tags/multi-user-authentication","3a5"),exact:!0},{path:"/blog/tags/name-migration-progress",component:d("/blog/tags/name-migration-progress","396"),exact:!0},{path:"/blog/tags/negative-narratives",component:d("/blog/tags/negative-narratives","ef7"),exact:!0},{path:"/blog/tags/new-logo",component:d("/blog/tags/new-logo","3d9"),exact:!0},{path:"/blog/tags/new-name",component:d("/blog/tags/new-name","28c"),exact:!0},{path:"/blog/tags/new-name-announcement",component:d("/blog/tags/new-name-announcement","7b6"),exact:!0},{path:"/blog/tags/notes",component:d("/blog/tags/notes","f1b"),exact:!0},{path:"/blog/tags/november-update",component:d("/blog/tags/november-update","a61"),exact:!0},{path:"/blog/tags/official-installations",component:d("/blog/tags/official-installations","733"),exact:!0},{path:"/blog/tags/open-source",component:d("/blog/tags/open-source","6be"),exact:!0},{path:"/blog/tags/parental-control",component:d("/blog/tags/parental-control","65b"),exact:!0},{path:"/blog/tags/partnership",component:d("/blog/tags/partnership","0de"),exact:!0},{path:"/blog/tags/partnerships",component:d("/blog/tags/partnerships","588"),exact:!0},{path:"/blog/tags/platform",component:d("/blog/tags/platform","0bc"),exact:!0},{path:"/blog/tags/platform-values",component:d("/blog/tags/platform-values","376"),exact:!0},{path:"/blog/tags/plugin-system",component:d("/blog/tags/plugin-system","4f9"),exact:!0},{path:"/blog/tags/poll",component:d("/blog/tags/poll","eda"),exact:!0},{path:"/blog/tags/poll-results",component:d("/blog/tags/poll-results","2a9"),exact:!0},{path:"/blog/tags/polls",component:d("/blog/tags/polls","829"),exact:!0},{path:"/blog/tags/public",component:d("/blog/tags/public","f5f"),exact:!0},{path:"/blog/tags/racist",component:d("/blog/tags/racist","2bb"),exact:!0},{path:"/blog/tags/rawg",component:d("/blog/tags/rawg","5ed"),exact:!0},{path:"/blog/tags/rawg-api",component:d("/blog/tags/rawg-api","751"),exact:!0},{path:"/blog/tags/reddit-forum",component:d("/blog/tags/reddit-forum","61e"),exact:!0},{path:"/blog/tags/release",component:d("/blog/tags/release","15f"),exact:!0},{path:"/blog/tags/renaming-app",component:d("/blog/tags/renaming-app","d2c"),exact:!0},{path:"/blog/tags/revenue-generation",component:d("/blog/tags/revenue-generation","68c"),exact:!0},{path:"/blog/tags/roadmap",component:d("/blog/tags/roadmap","e17"),exact:!0},{path:"/blog/tags/safe-environment",component:d("/blog/tags/safe-environment","620"),exact:!0},{path:"/blog/tags/self-hosted",component:d("/blog/tags/self-hosted","19e"),exact:!0},{path:"/blog/tags/self-hosted-newsletter",component:d("/blog/tags/self-hosted-newsletter","b53"),exact:!0},{path:"/blog/tags/selfhosted-podcast",component:d("/blog/tags/selfhosted-podcast","8d7"),exact:!0},{path:"/blog/tags/server-update",component:d("/blog/tags/server-update","7ee"),exact:!0},{path:"/blog/tags/sharing-blog-posts",component:d("/blog/tags/sharing-blog-posts","2e3"),exact:!0},{path:"/blog/tags/simplifying-game-installation",component:d("/blog/tags/simplifying-game-installation","0a0"),exact:!0},{path:"/blog/tags/software",component:d("/blog/tags/software","ed0"),exact:!0},{path:"/blog/tags/software-development",component:d("/blog/tags/software-development","f78"),exact:!0},{path:"/blog/tags/software-licensing",component:d("/blog/tags/software-licensing","6a0"),exact:!0},{path:"/blog/tags/software-updates",component:d("/blog/tags/software-updates","742"),exact:!0},{path:"/blog/tags/solution",component:d("/blog/tags/solution","a71"),exact:!0},{path:"/blog/tags/source-available",component:d("/blog/tags/source-available","501"),exact:!0},{path:"/blog/tags/source-available-software",component:d("/blog/tags/source-available-software","42f"),exact:!0},{path:"/blog/tags/spam",component:d("/blog/tags/spam","99a"),exact:!0},{path:"/blog/tags/special-thanks",component:d("/blog/tags/special-thanks","721"),exact:!0},{path:"/blog/tags/speculation",component:d("/blog/tags/speculation","691"),exact:!0},{path:"/blog/tags/spreading-the-word",component:d("/blog/tags/spreading-the-word","9a5"),exact:!0},{path:"/blog/tags/startup",component:d("/blog/tags/startup","387"),exact:!0},{path:"/blog/tags/steam",component:d("/blog/tags/steam","5cb"),exact:!0},{path:"/blog/tags/subreddit-migration",component:d("/blog/tags/subreddit-migration","bf0"),exact:!0},{path:"/blog/tags/subscription",component:d("/blog/tags/subscription","088"),exact:!0},{path:"/blog/tags/subscription-model",component:d("/blog/tags/subscription-model","7e6"),exact:!0},{path:"/blog/tags/subscription-to-updates-role",component:d("/blog/tags/subscription-to-updates-role","97f"),exact:!0},{path:"/blog/tags/success",component:d("/blog/tags/success","cc5"),exact:!0},{path:"/blog/tags/support",component:d("/blog/tags/support","a33"),exact:!0},{path:"/blog/tags/support-request",component:d("/blog/tags/support-request","99a"),exact:!0},{path:"/blog/tags/surge-of-new-users",component:d("/blog/tags/surge-of-new-users","4ba"),exact:!0},{path:"/blog/tags/sustainability",component:d("/blog/tags/sustainability","5a8"),exact:!0},{path:"/blog/tags/tech-progress",component:d("/blog/tags/tech-progress","1f3"),exact:!0},{path:"/blog/tags/testing",component:d("/blog/tags/testing","ad7"),exact:!0},{path:"/blog/tags/theme",component:d("/blog/tags/theme","6c7"),exact:!0},{path:"/blog/tags/threats",component:d("/blog/tags/threats","3f9"),exact:!0},{path:"/blog/tags/transition-process",component:d("/blog/tags/transition-process","a0e"),exact:!0},{path:"/blog/tags/transparency",component:d("/blog/tags/transparency","7b3"),exact:!0},{path:"/blog/tags/trolls",component:d("/blog/tags/trolls","22a"),exact:!0},{path:"/blog/tags/twitch-tv",component:d("/blog/tags/twitch-tv","c17"),exact:!0},{path:"/blog/tags/ui-redesign",component:d("/blog/tags/ui-redesign","1e3"),exact:!0},{path:"/blog/tags/ui-update",component:d("/blog/tags/ui-update","0da"),exact:!0},{path:"/blog/tags/upcoming-update",component:d("/blog/tags/upcoming-update","f39"),exact:!0},{path:"/blog/tags/update",component:d("/blog/tags/update","fa1"),exact:!0},{path:"/blog/tags/updates",component:d("/blog/tags/updates","125"),exact:!0},{path:"/blog/tags/user-engagement",component:d("/blog/tags/user-engagement","51e"),exact:!0},{path:"/blog/tags/user-participation",component:d("/blog/tags/user-participation","15b"),exact:!0},{path:"/blog/tags/video-games",component:d("/blog/tags/video-games","b8c"),exact:!0},{path:"/blog/tags/videogame",component:d("/blog/tags/videogame","f65"),exact:!0},{path:"/blog/tags/voting",component:d("/blog/tags/voting","f23"),exact:!0},{path:"/docs",component:d("/docs","8eb"),routes:[{path:"/docs",component:d("/docs","824"),routes:[{path:"/docs",component:d("/docs","003"),routes:[{path:"/docs/advanced-usage/early-access-program",component:d("/docs/advanced-usage/early-access-program","1a3"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/fail2ban-gamevault-guide",component:d("/docs/advanced-usage/fail2ban-gamevault-guide","c21"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/linux-client",component:d("/docs/advanced-usage/linux-client","832"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/rest-api",component:d("/docs/advanced-usage/rest-api","68a"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/steamdeck",component:d("/docs/advanced-usage/steamdeck","77f"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/data",component:d("/docs/client-docs/data","9cf"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/gui",component:d("/docs/client-docs/gui","04f"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/how-to-use",component:d("/docs/client-docs/how-to-use","4c0"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/setup",component:d("/docs/client-docs/setup","ff6"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/themes",component:d("/docs/client-docs/themes","804"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/updating-client",component:d("/docs/client-docs/updating-client","9cd"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/client-apis",component:d("/docs/gamevault-plus/client-apis","64c"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/client-setup",component:d("/docs/gamevault-plus/client-setup","51c"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/introduction",component:d("/docs/gamevault-plus/introduction","4dc"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/themes",component:d("/docs/gamevault-plus/themes","373"),exact:!0,sidebar:"docs"},{path:"/docs/intro",component:d("/docs/intro","423"),exact:!0,sidebar:"docs"},{path:"/docs/license-contribute",component:d("/docs/license-contribute","007"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/adding-games",component:d("/docs/server-docs/adding-games","e2d"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/backup-and-restore",component:d("/docs/server-docs/backup-and-restore","dbe"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/configuration",component:d("/docs/server-docs/configuration","d69"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/game-types",component:d("/docs/server-docs/game-types","37b"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/indexing",component:d("/docs/server-docs/indexing","dc2"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/media",component:d("/docs/server-docs/media","309"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/metadata-enrichment/metadata",component:d("/docs/server-docs/metadata-enrichment/metadata","72d"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/metadata-enrichment/provider-igdb",component:d("/docs/server-docs/metadata-enrichment/provider-igdb","29e"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/parental-control",component:d("/docs/server-docs/parental-control","450"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/plugins",component:d("/docs/server-docs/plugins","1b3"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/server-news",component:d("/docs/server-docs/server-news","bc7"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/",component:d("/docs/server-docs/setup/","9a4"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/caprover",component:d("/docs/server-docs/setup/caprover","0fd"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/docker-compose",component:d("/docs/server-docs/setup/docker-compose","d03"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/native",component:d("/docs/server-docs/setup/native","472"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/synology-container-manager",component:d("/docs/server-docs/setup/synology-container-manager","c21"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/truenas-scale",component:d("/docs/server-docs/setup/truenas-scale","97e"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/unraid",component:d("/docs/server-docs/setup/unraid","ec0"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/structure",component:d("/docs/server-docs/structure","ff2"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/updating-games",component:d("/docs/server-docs/updating-games","0d0"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/user-management",component:d("/docs/server-docs/user-management","17a"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/websockets",component:d("/docs/server-docs/websockets","c8c"),exact:!0,sidebar:"docs"},{path:"/docs/troubleshooting",component:d("/docs/troubleshooting","662"),exact:!0,sidebar:"docs"}]}]}]},{path:"/",component:d("/","2e1"),exact:!0},{path:"*",component:d("*")}]},8271:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,g,m,b,h,y,v,_,w,x,S,k,E,O,j,P,C,T,I,A,N,L,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r 0){var l=R.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new R.Token(n.slice(i,a),l))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n 1&&(a e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t 0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new R.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r =e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s 1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o =this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos 1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},4889:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(5271),o=n(2676);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},9617:(e,t,n)=>{"use strict";var r=n(5271),o=n(8751),a=n(3810),i=n(8594),s=n(6809),l=n(6593);const c=[n(8797),n(361),n(1893),n(4798),n(1925)];var u=n(7297),d=n(3225),p=n(7677),f=n(2676);function g(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var m=n(2791),b=n(6172),h=n(285),y=n(9364),v=n(9967),_=n(9897),w=n(8451),x=n(9247),S=n(5678),k=n(8625);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,b.Z)(),r=(0,_.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(m.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function O(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,b.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,b.Z)(),{pathname:r}=(0,d.TH)();return e+(0,S.Do)((0,h.ZP)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(m.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function j(){const{i18n:{currentLocale:e}}=(0,b.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(m.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.h})]}),n&&(0,f.jsx)(v.d,{image:n}),(0,f.jsx)(O,{}),(0,f.jsx)(E,{}),(0,f.jsx)(k.Z,{tag:x.H,locale:e}),(0,f.jsx)(m.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const P=new Map;var C=n(4889),T=n(4500),I=n(2246);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r {const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,I.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),A("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.AW,{location:t,render:()=>e})})}}const D=R,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n \n\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}((0,d.TH)());return(0,f.jsx)(D,{location:e,children:W})}function G(){return(0,f.jsx)(Q.Z,{children:(0,f.jsx)(T.M,{children:(0,f.jsxs)(C.t,{children:[(0,f.jsxs)(g,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(j,{}),(0,f.jsx)(U,{}),(0,f.jsx)(q,{})]}),(0,f.jsx)(Z,{})]})})})}var Y=n(6887);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(7346);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),L(e))},re=Object.freeze(ne);function oe(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.UT,{children:t}):(0,f.jsx)(i.VK,{children:t})}const ae=Boolean(!0);if(l.Z.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.B6,{children:(0,f.jsx)(oe,{children:(0,f.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ae)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};L(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},4500:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(5271),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"advanced-usage/early-access-program","path":"/docs/advanced-usage/early-access-program","sidebar":"docs"},{"id":"advanced-usage/fail2ban-gamevault-guide","path":"/docs/advanced-usage/fail2ban-gamevault-guide","sidebar":"docs"},{"id":"advanced-usage/linux-client","path":"/docs/advanced-usage/linux-client","sidebar":"docs"},{"id":"advanced-usage/rest-api","path":"/docs/advanced-usage/rest-api","sidebar":"docs"},{"id":"advanced-usage/steamdeck","path":"/docs/advanced-usage/steamdeck","sidebar":"docs"},{"id":"client-docs/data","path":"/docs/client-docs/data","sidebar":"docs"},{"id":"client-docs/gui","path":"/docs/client-docs/gui","sidebar":"docs"},{"id":"client-docs/how-to-use","path":"/docs/client-docs/how-to-use","sidebar":"docs"},{"id":"client-docs/setup","path":"/docs/client-docs/setup","sidebar":"docs"},{"id":"client-docs/themes","path":"/docs/client-docs/themes","sidebar":"docs"},{"id":"client-docs/updating-client","path":"/docs/client-docs/updating-client","sidebar":"docs"},{"id":"gamevault-plus/client-apis","path":"/docs/gamevault-plus/client-apis","sidebar":"docs"},{"id":"gamevault-plus/client-setup","path":"/docs/gamevault-plus/client-setup","sidebar":"docs"},{"id":"gamevault-plus/introduction","path":"/docs/gamevault-plus/introduction","sidebar":"docs"},{"id":"gamevault-plus/themes","path":"/docs/gamevault-plus/themes","sidebar":"docs"},{"id":"intro","path":"/docs/intro","sidebar":"docs"},{"id":"license-contribute","path":"/docs/license-contribute","sidebar":"docs"},{"id":"server-docs/adding-games","path":"/docs/server-docs/adding-games","sidebar":"docs"},{"id":"server-docs/backup-and-restore","path":"/docs/server-docs/backup-and-restore","sidebar":"docs"},{"id":"server-docs/configuration","path":"/docs/server-docs/configuration","sidebar":"docs"},{"id":"server-docs/game-types","path":"/docs/server-docs/game-types","sidebar":"docs"},{"id":"server-docs/indexing","path":"/docs/server-docs/indexing","sidebar":"docs"},{"id":"server-docs/media","path":"/docs/server-docs/media","sidebar":"docs"},{"id":"server-docs/metadata-enrichment/metadata","path":"/docs/server-docs/metadata-enrichment/metadata","sidebar":"docs"},{"id":"server-docs/metadata-enrichment/provider-igdb","path":"/docs/server-docs/metadata-enrichment/provider-igdb","sidebar":"docs"},{"id":"server-docs/parental-control","path":"/docs/server-docs/parental-control","sidebar":"docs"},{"id":"server-docs/plugins","path":"/docs/server-docs/plugins","sidebar":"docs"},{"id":"server-docs/server-news","path":"/docs/server-docs/server-news","sidebar":"docs"},{"id":"server-docs/setup/caprover","path":"/docs/server-docs/setup/caprover","sidebar":"docs"},{"id":"server-docs/setup/docker-compose","path":"/docs/server-docs/setup/docker-compose","sidebar":"docs"},{"id":"server-docs/setup/native","path":"/docs/server-docs/setup/native","sidebar":"docs"},{"id":"server-docs/setup/synology-container-manager","path":"/docs/server-docs/setup/synology-container-manager","sidebar":"docs"},{"id":"server-docs/setup/toc","path":"/docs/server-docs/setup/","sidebar":"docs"},{"id":"server-docs/setup/truenas-scale","path":"/docs/server-docs/setup/truenas-scale","sidebar":"docs"},{"id":"server-docs/setup/unraid","path":"/docs/server-docs/setup/unraid","sidebar":"docs"},{"id":"server-docs/structure","path":"/docs/server-docs/structure","sidebar":"docs"},{"id":"server-docs/updating-games","path":"/docs/server-docs/updating-games","sidebar":"docs"},{"id":"server-docs/user-management","path":"/docs/server-docs/user-management","sidebar":"docs"},{"id":"server-docs/websockets","path":"/docs/server-docs/websockets","sidebar":"docs"},{"id":"troubleshooting","path":"/docs/troubleshooting","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}},"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.5.2"},"docusaurus-plugin-image-zoom":{"type":"package","name":"docusaurus-plugin-image-zoom","version":"2.0.0"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.2.0"},"tailwind-plugin":{"type":"local"}}}');var c=n(2676);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var r=n(5271),o=n(6593),a=n(2791),i=n(5678),s=n(3557),l=n(4721),c=n(2676);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.BN)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.Z,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.Z,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const g=e=>(0,c.jsx)(f,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??g)(e)}return e??null}}},6593:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},2791:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(5271);var r=n(3810),o=n(2676);function a(e){return(0,o.jsx)(r.ql,{...e})}},6527:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(5271),o=n(8594),a=n(5678),i=n(6172),s=n(374),l=n(6593),c=n(4167),u=n(285),d=n(2676);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":b,autoAddBaseUrl:h=!0,...y}=e;const{siteConfig:v}=(0,i.Z)(),{trailingSlash:_,baseUrl:w}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,u.Cg)(),k=(0,c.Z)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const O=p||f;const j=(0,s.Z)(O),P=O?.replace("pathname://","");let C=void 0!==P?(T=P,h&&(e=>e.startsWith("/"))(T)?S(T):T):void 0;var T;"hash"===x&&C?.startsWith("./")&&(C=C?.slice(1)),C&&j&&(C=(0,a.Do)(C,{trailingSlash:_,baseUrl:w}));const I=(0,r.useRef)(!1),A=n?o.OL:o.rU,N=l.Z.canUseIntersectionObserver,L=(0,r.useRef)(),R=()=>{I.current||null==C||(window.docusaurus.preload(C),I.current=!0)};(0,r.useEffect)((()=>(!N&&j&&l.Z.canUseDOM&&null!=C&&window.docusaurus.prefetch(C),()=>{N&&L.current&&L.current.disconnect()})),[L,C,N,j]);const D=C?.startsWith("#")??!1,F=!y.target||"_self"===y.target,M=!C||!j||!F||D&&"hash"!==x;b||!D&&M||k.collectLink(C),y.id&&k.collectAnchor(y.id);const z={};return M?(0,d.jsx)("a",{ref:E,href:C,...O&&!j&&{target:"_blank",rel:"noopener noreferrer"},...y,...z}):(0,d.jsx)(A,{...y,onMouseEnter:R,onTouchStart:R,innerRef:e=>{E.current=e,N&&e&&j&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),L.current.observe(e))},to:C,...n&&{isActive:m,activeClassName:g},...z})}const f=r.forwardRef(p)},2922:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(5271),o=n(2676);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("IllegalYour Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = ${e} ${"/"===e?" (default value)":""}
\nWe suggest trying baseUrl =
\nchildren",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},4384:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},374:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},285:(e,t,n)=>{"use strict";n.d(t,{Cg:()=>i,ZP:()=>s});var r=n(5271),o=n(6172),a=n(374);function i(){const{siteConfig:e}=(0,o.Z)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.b)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},4167:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(5271);n(2676);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},6172:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(5271),o=n(4500);function a(){return(0,r.useContext)(o._)}},3923:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(6172),o=n(4384);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},6594:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(5271),o=n(4889);function a(){return(0,r.useContext)(o._)}},2246:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(5271);const o=n(6593).Z.canUseDOM?r.useLayoutEffect:r.useEffect},4268:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(5271),o=n(4721);function a(){const e=r.useContext(o._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},7346:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},4721:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(5271),o=n(2676);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},1777:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b,Oh:()=>v});var r=n(5271),o=n(5364),a=n(4384),i=n(9364),s=n(1118),l=n(8274),c=n(2676);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function g(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=g();return(0,c.jsx)(f.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return(0,c.jsx)(m,{children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=h(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o._r)(),[t]=h();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},684:(e,t,n)=>{"use strict";n.d(t,{J:()=>a,z:()=>i});var r=n(5364),o=n(1777);function a(e,t){return`docs-${e}-${t}`}function i(){const e=(0,r._r)(),t=(0,r.WS)(),n=(0,o.Oh)();return[...Object.keys(e).map((function(r){const o=t?.activePlugin.pluginId===r?t.activeVersion:void 0,i=n[r],s=e[r].versions.find((e=>e.isLast));return a(r,(o??i??s).name)}))]}},1081:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(5271),o=n(8274),a=n(2676);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},4376:(e,t,n)=>{"use strict";n.d(t,{LM:()=>p,MN:()=>E,SN:()=>k,_F:()=>b,f:()=>y,jA:()=>f,lO:()=>w,oz:()=>x,s1:()=>_,vY:()=>S});var r=n(5271),o=n(3225),a=n(7677),i=n(5364),s=n(6422),l=n(2347),c=n(1777),u=n(5219),d=n(1081);function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}function f(){const{pathname:e}=(0,o.TH)(),t=(0,d.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,s.Mg)(e,t),m=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||m(e.items,t))}function h(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>h(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>h(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,s.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function _(){const e=(0,d.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,c.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,l.jj)([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,l.jj)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,u.E)(),i=t.routes,s=i.find((e=>(0,o.LX)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.H)(i),sidebarName:l,sidebarItems:c}}function E(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!p(e)))}},5219:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(5271),o=n(8274),a=n(2676);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},5364:(e,t,n)=>{"use strict";n.d(t,{MN:()=>l.MN,Iw:()=>y,gA:()=>g,WS:()=>m,_r:()=>p,jA:()=>l.jA,Jo:()=>v,z1:()=>u.z,zh:()=>f,J:()=>c.J,yW:()=>h,gB:()=>b});var r=n(3225),o=n(3923);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function s(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}var l=n(4376),c=n(1777),u=n(684);const d={},p=()=>(0,o.OD)("docusaurus-plugin-content-docs")??d,f=e=>{try{return(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function g(e){void 0===e&&(e={});const t=p(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function m(e){void 0===e&&(e={});const t=g(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function b(e){return f(e).versions}function h(e){const t=f(e);return a(t)}function y(e){const t=f(e),{pathname:n}=(0,r.TH)();return s(t,n)}function v(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},4354:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t {"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(9981),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},361:(e,t,n)=>{"use strict";n.r(t);var r=n(739),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(1559),n(6573)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},3221:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(5271);var r=n(4814),o=n(2922),a=n(9364),i=n(6527),s=n(4167);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_BnxJ",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_re8X"};var c=n(2676);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.Z)(),{navbar:{hideOnScroll:p}}=(0,a.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},2366:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(5271);const r={iconExternalLink:"iconExternalLink_rK98"};var o=n(2676);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},3557:(e,t,n)=>{"use strict";n.d(t,{Z:()=>si});var r=n(5271),o=n(4814),a=n(1048),i=n(9967),s=n(3225),l=n(2922),c=n(4890),u=n(2676);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var b=n(3509),h=n(8451);const y={skipToContent:"skipToContent_N_FB"};function v(){return(0,u.jsx)(m,{className:y.skipToContent})}var _=n(9364),w=n(6701);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_xADE"};function k(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_CsLf"};function O(e){const{announcementBar:t}=(0,_.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const j={announcementBar:"announcementBar_wEz5",announcementBarPlaceholder:"announcementBarPlaceholder_e0hD",announcementBarClose:"announcementBarClose_hClt",announcementBarContent:"announcementBarContent_RqlE"};function P(){const{announcementBar:e}=(0,_.L)(),{isActive:t,close:n}=(0,w.n)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:j.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:j.announcementBarPlaceholder}),(0,u.jsx)(O,{className:j.announcementBarContent}),a&&(0,u.jsx)(k,{onClick:n,className:j.announcementBarClose})]})}var C=n(8568),T=n(1309);var I=n(8274),A=n(3158);const N=r.createContext(null);function L(e){let{children:t}=e;const n=function(){const e=(0,C.e)(),t=(0,A.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,I.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(N);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,A.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(7934),z=n(6594);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_Ctpc",toggleButton:"toggleButton_QfJ4",darkToggleIcon:"darkToggleIcon_DyWs",lightToggleIcon:"lightToggleIcon_SP6E",toggleButtonDisabled:"toggleButtonDisabled_hyb0"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const Q=r.memo(H),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_ul4N"};function Z(e){let{className:t}=e;const n=(0,_.L)().navbar.style,r=(0,_.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.I)();return r?null:(0,u.jsx)(Q,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=n(698);function q(){return(0,u.jsx)(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,C.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(q,{}),(0,u.jsx)(Z,{className:"margin-right--md"}),(0,u.jsx)(G,{})]})}var K=n(6527),X=n(285),J=n(374);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(2366);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.ZP)(r),p=(0,X.ZP)(t),f=(0,X.ZP)(o,{forcePrependBaseUrl:!0}),g=a&&o&&!(0,J.Z)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,g&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(K.Z,{href:l?f:o,...c,...m}):(0,u.jsx)(K.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(3955),se=n(6422),le=n(6172);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_x5K8"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(va,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(va,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var ge=n(9897);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const be="iconLanguage_QTLV";var he=n(967);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a e.length)&&(t=e.length);for(var n=0,r=new Array(t);n e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t =3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("clickedObjectIDsAfterSearch",Re(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("clickedObjectIDs",Re(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r 0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("convertedObjectIDsAfterSearch",Re(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("convertedObjectIDs",Re(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r 0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,je);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r 0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function Fe(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function ze(e){return ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ze(e)}function Be(e){return function(e){if(Array.isArray(e))return $e(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return $e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $e(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n 0&&We({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function c(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:He(He({},i?{clickAnalytics:!0}:{}),e?{userToken:e}:{}),insights:l}})}s("addAlgoliaAgent","insights-plugin"),c(),s("onUserTokenChange",c),s("getUserToken",null,(function(e,t){c(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[He({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[He({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function Ge(){var e,t=arguments.length>1?arguments[1]:void 0;return[].concat(Be(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]),["autocomplete-internal"],Be(null!==(e=t.algoliaInsightsPlugin)&&void 0!==e&&e.__automaticInsights?["autocomplete-automatic"]:[]))}function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function Ke(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Xe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Ye(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Ye(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ye(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Je(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n 0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:st(),plugins:o,initialState:bt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(ft(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:xe,onResolve:xe};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=ct(ct({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return et(e)})).then((function(e){return e.map((function(e){return bt(bt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:bt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function vt(e){return vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vt(e)}function _t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wt(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Qt,Vt,Zt,Wt=null,qt=(Qt=-1,Vt=-1,Zt=void 0,function(e){var t=++Qt;return Promise.resolve(e).then((function(e){return Zt&&t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var rn=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function on(e){return on="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},on(e)}var an=["props","refresh","store"],sn=["inputElement","formElement","panelElement"],ln=["inputElement"],cn=["inputElement","maxLength"],un=["source"],dn=["item","source"];function pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function bn(e){var t=e.props,n=e.refresh,r=e.store,o=mn(e,an);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return fn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},mn(e,sn))},getRootProps:function(e){return fn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return Yt(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":Yt(t.id,"label")},e)},getFormProps:function(e){e.inputElement;return fn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(fn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(fn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},mn(e,ln))},getLabelProps:function(e){return fn({htmlFor:Yt(t.id,"input"),id:Yt(t.id,"label")},e)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Gt(fn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var s=e||{},l=(s.inputElement,s.maxLength),c=void 0===l?512:l,u=mn(s,cn),d=Ft(r.getState()),p=function(e){return Boolean(e&&e.match(rn))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),f=t.enterKeyHint||(null!=d&&d.itemUrl&&!p?"go":"search");return fn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?Yt(t.id,"item-".concat(r.getState().activeItemId),null==d?void 0:d.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return Yt(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":Yt(t.id,"label"),value:r.getState().completion||r.getState().query,id:Yt(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:f,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){Gt(fn({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=nn(e,Xt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=Ft(o.getState()),t=n.environment.document.getElementById(Yt(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},s=function(){var e=Ft(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(en({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Gt(en({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)})):(o.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=Ft(o.getState()),c=l.item,u=l.itemInputValue,d=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:c,state:o.getState()});Gt(en({event:t,nextState:{isOpen:!1},props:n,query:u,refresh:r,store:o},a)).then((function(){p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a))}))}}}(fn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:xe,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},u)},getPanelProps:function(e){return fn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=mn(n,un);return fn({role:"listbox","aria-labelledby":Yt(t.id,"label"),id:Yt(t.id,"list",r)},o)},getItemProps:function(e){var a=e.item,i=e.source,s=mn(e,dn);return fn({id:Yt(t.id,"item-".concat(a.__autocomplete_id),i),role:"option","aria-selected":r.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",a.__autocomplete_id);var t=Ft(r.getState());if(null!==r.getState().activeItemId&&t){var i=t.item,s=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(fn({event:e,item:i,itemInputValue:s,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var s=i.getItemInputValue({item:a,state:r.getState()}),l=i.getItemUrl({item:a,state:r.getState()});(l?Promise.resolve():Gt(fn({event:e,nextState:{isOpen:!1},props:t,query:s,refresh:n,store:r},o))).then((function(){i.onSelect(fn({event:e,item:a,itemInputValue:s,itemUrl:l,refresh:n,source:i,state:r.getState()},o))}))}},s)}}}var hn="1.12.2",yn=[{segment:"autocomplete-core",version:hn}];function vn(e){return vn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vn(e)}function _n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wn(e){for(var t=1;t =n?null===r?null:0:o}function On(e){return On="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},On(e)}function jn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pn(e){for(var t=1;t =5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},l=0;l "===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(s(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(s(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(s(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return s(),i}(e)),t),arguments,[])).length>1?t:t[0]}var zn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},$n=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML=' \n ',t},Un=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Hn(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Qn(e){this._listeners[e.type](e)}function Vn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Hn(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||Un.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Qn,r):e.removeEventListener(t,Qn,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Zn(e){return"onChange"===e?"onInput":e}function Wn(e,t){for(var n in t)Vn(e,Zn(n),t[n])}function qn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Vn(e,Zn(n),t[n])}var Gn=["children"];function Yn(e){return function(e){if(Array.isArray(e))return Kn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Kn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Kn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n\n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Jn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Xn(n,Gn),i=e.document.createElement(t);return Wn(i,a),i.append.apply(i,Yn(o)),i}}function er(e){return er="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},er(e)}var tr=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function nr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function rr(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var ir=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,s=ar(e,tr),l=Jn(n)("input",s),c=r(rr({state:i,props:o({inputElement:l}),inputElement:l},t));return Wn(l,rr(rr({},c),{},{onKeyDown:function(e){a&&"Tab"===e.key||c.onKeyDown(e)}})),l};function sr(e){return sr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sr(e)}function lr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cr(e){for(var t=1;t 2&&(i.children=arguments.length>3?dr.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return Er(e,i,r,o,null)}function Er(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==o?++fr:o,__i:-1,__u:0};return null==o&&null!=pr.vnode&&pr.vnode(a),a}function Or(e){return e.children}function jr(e,t){this.props=e,this.context=t}function Pr(e,t){if(null==t)return e.__?Pr(e.__,e.__i+1):null;for(var n;t t&&gr.sort(hr));Ir.__r=0}function Ar(e,t,n,r,o,a,i,s,l,c,u){var d,p,f,g,m,b=r&&r.__k||vr,h=t.length;for(n.__d=l,Nr(n,t,b),l=n.__d,d=0;d 0?Er(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o)?(o.__=e,o.__b=e.__b+1,s=Rr(o,n,i=r+d,u),o.__i=s,a=null,-1!==s&&(u--,(a=n[s])&&(a.__u|=131072)),null==a||null===a.__v?(-1==s&&d--,"function"!=typeof o.type&&(o.__u|=65536)):s!==i&&(s===i+1?d++:s>i?u>l-i?d+=s-i:d--:d=s(null!=l&&0==(131072&l.__u)?1:0))for(;i>=0||s =0){if((l=t[i])&&0==(131072&l.__u)&&o==l.key&&a===l.type)return i;i--}if(s 0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Gr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Kr(e){return function(e){if(Array.isArray(e))return Xr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Xr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n ",""":'"',"'":"'"},no=new RegExp(/\w/i),ro=/&(amp|quot|lt|gt|#39);/g,oo=RegExp(ro.source);function ao(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,s=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return no.test((o=a.value)&&oo.test(o)?o.replace(ro,(function(e){return to[e]})):o)||s!==i?a.isHighlighted:s}function io(e){return io="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},io(e)}function so(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lo(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Oo={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},jo=function(e,t){var n=e.children;(0,e.render)(n,t)},Po={createElement:kr,Fragment:Or,render:Zr};function Co(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var s=r.getBoundingClientRect();return{top:i,left:s.left,right:o.document.documentElement.clientWidth-(s.left+s.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function To(e){return To="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},To(e)}function Io(){return Io=Object.assign?Object.assign.bind():function(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Yo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ko(e){for(var t=1;t 0;if(!p.value.core.openOnFocus&&!t.query)return n;var r=Boolean(c.current||p.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Ro,options:e}}))})),m=ve(Ko({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},p.value.core.initialState)),b={getEnvironmentProps:p.value.renderer.getEnvironmentProps,getFormProps:p.value.renderer.getFormProps,getInputProps:p.value.renderer.getInputProps,getItemProps:p.value.renderer.getItemProps,getLabelProps:p.value.renderer.getLabelProps,getListProps:p.value.renderer.getListProps,getPanelProps:p.value.renderer.getPanelProps,getRootProps:p.value.renderer.getRootProps},h={setActiveItemId:g.value.setActiveItemId,setQuery:g.value.setQuery,setCollections:g.value.setCollections,setIsOpen:g.value.setIsOpen,setStatus:g.value.setStatus,setContext:g.value.setContext,refresh:g.value.refresh,navigator:g.value.navigator},y=s((function(){return Mn.bind(p.value.renderer.renderer.createElement)})),v=s((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,s=void 0===i?"Search":i,l=e.propGetters,c=e.setIsModalOpen,u=e.state,d=e.translations,p=Jn(o),f=l.getRootProps(cr({state:u,props:t.getRootProps({})},n)),g=p("div",cr({class:r.root},f)),m=p("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),b=p("div",{class:r.detachedOverlay,children:[m],onMouseDown:function(){c(!1),t.setIsOpen(!1)}}),h=l.getLabelProps(cr({state:u,props:t.getLabelProps({})},n)),y=p("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[zn({environment:o})]}),v=p("label",cr({class:r.label,children:[y]},h)),_=p("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Bn({environment:o})]}),w=p("div",{class:r.loadingIndicator,children:[$n({environment:o})]}),x=ir({class:r.input,environment:o,state:u,getInputProps:l.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),S=p("div",{class:r.inputWrapperPrefix,children:[v,w]}),k=p("div",{class:r.inputWrapperSuffix,children:[_]}),E=p("div",{class:r.inputWrapper,children:[x]}),O=l.getFormProps(cr({state:u,props:t.getFormProps({inputElement:x})},n)),j=p("form",cr({class:r.form,children:[S,E,k]},O)),P=l.getPanelProps(cr({state:u,props:t.getPanelProps({})},n)),C=p("div",cr({class:r.panel},P)),T=p("div",{class:r.detachedSearchButtonQuery,textContent:u.query}),I=p("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(u.query),textContent:s});if(a){var A=p("div",{class:r.detachedSearchButtonIcon,children:[zn({environment:o})]}),N=p("button",{type:"button",class:r.detachedSearchButton,onClick:function(){c(!0)},children:[A,I,T]}),L=p("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),c(!1)}}),R=p("div",{class:r.detachedFormContainer,children:[j,L]});m.appendChild(R),g.appendChild(N)}else g.appendChild(j);return{detachedContainer:m,detachedOverlay:b,detachedSearchButtonQuery:T,detachedSearchButtonPlaceholder:I,inputWrapper:E,input:x,root:g,form:j,label:v,submitButton:y,clearButton:_,loadingIndicator:w,panel:C}}({autocomplete:g.value,autocompleteScopeApi:h,classNames:p.value.renderer.classNames,environment:p.value.core.environment,isDetached:f.value,placeholder:p.value.core.placeholder,propGetters:b,setIsModalOpen:S,state:m.current,translations:p.value.renderer.translations})}));function _(){Wn(v.value.panel,{style:f.value?{}:Co({panelPlacement:p.value.renderer.panelPlacement,container:v.value.root,form:v.value.form,environment:p.value.core.environment})})}function w(e){m.current=e;var t={autocomplete:g.value,autocompleteScopeApi:h,classNames:p.value.renderer.classNames,components:p.value.renderer.components,container:p.value.renderer.container,html:y.value,dom:v.value,panelContainer:f.value?v.value.detachedContainer:p.value.renderer.panelContainer,propGetters:b,state:m.current,renderer:p.value.renderer.renderer},n=!at(e)&&!c.current&&p.value.renderer.renderNoResults||p.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;qn(r.root,o.getRootProps(No({state:a,props:t.getRootProps({})},n))),qn(r.input,o.getInputProps(No({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Wn(r.label,{hidden:"stalled"===a.status}),Wn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Wn(r.clearButton,{hidden:!a.query}),Wn(r.detachedSearchButtonQuery,{textContent:a.query}),Wn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,s=t.panelContainer,l=t.propGetters,c=t.state,u=t.components,d=t.renderer;if(c.isOpen){s.contains(i.panel)||"loading"===c.status||s.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===c.status);var p=c.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,s=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:u,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:c,html:a})),i.templates.noResults&&0===s.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:u,createElement:d.createElement,Fragment:d.Fragment,source:i,state:c,html:a})):d.createElement("ul",Io({className:o.list},l.getListProps(No({state:c,props:n.getListProps({source:i})},r))),s.map((function(e){var t=n.getItemProps({item:e,source:i});return d.createElement("li",Io({key:t.id,className:o.item},l.getItemProps(No({state:c,props:t},r))),i.templates.item({components:u,createElement:d.createElement,Fragment:d.Fragment,item:e,state:c,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:u,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:c,html:a})))})),f=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},p),d.createElement("div",{className:"aa-GradientBottom"})),g=p.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(No(No({children:f,state:c,sections:p,elements:g},d),{},{components:u,html:a},r),i.panel)}else s.contains(i.panel)&&s.removeChild(i.panel)}(n,t)}function x(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=p.value.renderer,i=r.components,s=Go(r,Wo);u.current=Bo(s,p.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Vo(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Ho(Ho({},e),{},Qo({},o,a)):e}),{})),initialState:m.current},e),l(),a(),g.value.refresh().then((function(){w(m.current)}))}function S(e){requestAnimationFrame((function(){var t=p.value.core.environment.document.body.contains(v.value.detachedOverlay);e!==t&&(e?(p.value.core.environment.document.body.appendChild(v.value.detachedOverlay),p.value.core.environment.document.body.classList.add("aa-Detached"),v.value.input.focus()):(p.value.core.environment.document.body.removeChild(v.value.detachedOverlay),p.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=g.value.getEnvironmentProps({formElement:v.value.form,panelElement:v.value.panel,inputElement:v.value.input});return Wn(p.value.core.environment,e),function(){Wn(p.value.core.environment,Object.keys(e).reduce((function(e,t){return Ko(Ko({},e),{},Xo({},t,void 0))}),{}))}})),r((function(){var e=f.value?p.value.core.environment.document.body:p.value.renderer.panelContainer,t=f.value?v.value.detachedOverlay:v.value.panel;return f.value&&m.current.isOpen&&S(!0),w(m.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=p.value.renderer.container;return e.appendChild(v.value.root),function(){e.removeChild(v.value.root)}})),r((function(){var e=ye((function(e){w(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(f.value&&r.isOpen!==n.isOpen&&S(n.isOpen),f.value||!n.isOpen||r.isOpen||_(),n.query!==r.query)&&p.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ye((function(){var e=f.value;f.value=p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches,e!==f.value?x({}):requestAnimationFrame(_)}),20);return p.value.core.environment.addEventListener("resize",e),function(){p.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!f.value)return function(){};function e(e){v.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=p.value.core.environment.matchMedia(getComputedStyle(p.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(_),function(){}})),Ko(Ko({},h),{},{update:x,destroy:function(){o()}})}var ea=n(2791);const ta=n(8271),na=ta;var ra=n(2e3),oa=n.n(ra);function aa(){const e=(0,s.TH)(),t=(0,s.k6)(),{siteConfig:{baseUrl:n}}=(0,le.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(oa())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var ia=n(3923),sa=n(9247);function la(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const ca={documents:[],index:na((function(){this.ref("id"),this.field("title"),this.field("content")}))};const ua=()=>{const e=(0,z.Z)(),[t,o]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{o("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:a}}=(0,le.Z)(),{titleBoost:i,contentBoost:c,tagsBoost:u,parentCategoriesBoost:d,indexDocSidebarParentCategories:p,maxSearchResults:f}=(0,ia.eZ)("@cmfcmf/docusaurus-search-local"),g=(0,s.k6)(),{tags:m}=function(){const{i18n:e}=(0,le.Z)(),t=n(5364).z1(),r=[sa.H,...t];return{locale:e.currentLocale,tags:r}}(),b=(0,r.useRef)(m);(0,r.useEffect)((()=>{b.current=m}),[m]);const h=(0,r.useRef)({}),y=async e=>{const t=h.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];h.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return ca;r=await n.json()}catch(n){return ca}return{documents:r.documents,index:na.Index.load(r.index)}}}(a,e);return t.forEach((e=>e(n))),h.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},v=(0,l.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),_=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(_.current)return w.current=Jo({container:_.current,placeholder:v,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:he.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;g.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,l.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,l.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,l.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=la(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),g.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,l.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return la(t)},async getItems(){const e=b.current,n=await Promise.all(e.map((e=>y(e)))),r=(e=>ta.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:i}),e.term(r,{fields:["title"],boost:i,wildcard:na.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:c}),e.term(r,{fields:["content"],boost:c,wildcard:na.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:u}),e.term(r,{fields:["tags"],boost:u,wildcard:na.Query.wildcard.TRAILING}),p&&(e.term(r,{fields:["sidebarParentCategories"],boost:d}),e.term(r,{fields:["sidebarParentCategories"],boost:d,wildcard:na.Query.wildcard.TRAILING}))})).slice(0,f).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,f)}}]}}),()=>w.current?.destroy()}),[f]),r.createElement(r.Fragment,null,r.createElement(ea.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(aa,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:_,"data-tags":m.join(",")})))},da={navbarSearchContainer:"navbarSearchContainer_ZzhW"};function pa(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,da.navbarSearchContainer),children:t})}var fa=n(5364),ga=n(4376);var ma=n(1777);function ba(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,ge.l)(),{search:f,hash:g}=(0,s.TH)(),m=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${g}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],b=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(me,{className:be}),b]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(pa,{className:n,children:(0,u.jsx)(ua,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,fa.Iw)(r),i=(0,ga.vY)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,fa.Iw)(r),i=(0,ga.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ga.lO)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,fa.Iw)(n),f=(0,fa.gB)(n),{savePreferredVersionName:g}=(0,ma.J)(n),m=[...o,...f.map((function(e){const t=ba(e,p);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...a],b=(0,ga.lO)(n)[0],h=t&&m.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&m.length>1?void 0:ba(b,p).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:h,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:h,to:y,items:m,isActive:r?()=>!1:void 0})}},ya=ha;function va(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=ya[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function _a(){const e=(0,C.e)(),t=(0,_.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(va,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function wa(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function xa(){const e=0===(0,_.L)().navbar.items.length,t=D();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(wa,{onClick:()=>t.hide()}),t.content]})}function Sa(){const e=(0,C.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(_a,{}),secondaryMenu:(0,u.jsx)(xa,{})}):null}const ka={navbarHideable:"navbarHideable_XAwL",navbarHidden:"navbarHidden_IdZ3"};function Ea(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function Oa(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,_.L)(),i=(0,C.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,T.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i =s?n(!1):i+c {if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[ka.navbarHideable,!d&&ka.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ea,{onClick:i.toggle}),(0,u.jsx)(Sa,{})]})}var ja=n(5678);const Pa={errorBoundaryError:"errorBoundaryError_yDia",errorBoundaryFallback:"errorBoundaryFallback_ExJr"};function Ca(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ta(e){let{error:t}=e;const n=(0,ja.BN)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Pa.errorBoundaryError,children:n})}class Ia extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Aa="right";function Na(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function La(){const{toggle:e,shown:t}=(0,C.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Na,{})})}const Ra={colorModeToggle:"colorModeToggle_z0vY"};function Da(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Ia,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(va,{...e})},t)))})}function Fa(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ma(){const e=(0,C.e)(),t=(0,_.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Aa)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(Fa,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(La,{}),(0,u.jsx)(q,{}),(0,u.jsx)(Da,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Da,{items:r}),(0,u.jsx)(Z,{className:Ra.colorModeToggle}),!o&&(0,u.jsx)(pa,{children:(0,u.jsx)(ua,{})})]})})}function za(){return(0,u.jsx)(Oa,{children:(0,u.jsx)(Ma,{})})}function Ba(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.ZP)(n),l=(0,X.ZP)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(K.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function $a(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Ba,{item:t})},t.href??t.to)}function Ua(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)($a,{item:e},t)))})]})}function Ha(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Ua,{column:e},t)))})}function Qa(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Va(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Ba,{item:t})}function Za(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Va,{item:e}),t.length!==n+1&&(0,u.jsx)(Qa,{})]},n)))})})}function Wa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Ha,{columns:t}):(0,u.jsx)(Za,{links:t})}var qa=n(4322);const Ga={footerLogoLink:"footerLogoLink_WvA8"};function Ya(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.Cg)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(qa.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function Ka(e){let{logo:t}=e;return t.href?(0,u.jsx)(K.Z,{href:t.href,className:Ga.footerLogoLink,target:t.target,children:(0,u.jsx)(Ya,{logo:t})}):(0,u.jsx)(Ya,{logo:t})}function Xa(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ja(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function ei(){const{footer:e}=(0,_.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Ja,{style:o,links:n&&n.length>0&&(0,u.jsx)(Wa,{links:n}),logo:r&&(0,u.jsx)(Ka,{logo:r}),copyright:t&&(0,u.jsx)(Xa,{copyright:t})})}const ti=r.memo(ei),ni=(0,I.Qc)([M.S,w.p,T.OC,ma.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(A.n2,{children:(0,u.jsx)(C.M,{children:(0,u.jsx)(L,{children:t})})})}]);function ri(e){let{children:t}=e;return(0,u.jsx)(ni,{children:t})}var oi=n(3221);function ai(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(oi.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Ca,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Ta,{error:t})})]})})})}const ii={mainWrapper:"mainWrapper_GHU6"};function si(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,h.t)(),(0,u.jsxs)(ri,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(P,{}),(0,u.jsx)(za,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(b.k.wrapper.main,ii.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(ai,{...e}),children:t})}),!n&&(0,u.jsx)(ti,{})]})}},698:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(5271);var r=n(6527),o=n(285),a=n(6172),i=n(9364),s=n(4322),l=n(2676);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.ZP)(t.src),dark:(0,o.ZP)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.ZP)(s?.href||"/"),g=n?"":t,m=s?.alt??g;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},8625:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(5271);var r=n(2791),o=n(2676);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},4322:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(5271),o=n(4814),a=n(6594),i=n(7934);const s={themedComponent:"themedComponent_EL3c","themedComponent--light":"themedComponent--light_qtcQ","themedComponent--dark":"themedComponent--dark_Jjwa"};var l=n(2676);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},3955:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>h});var r=n(5271),o=n(6593),a=n(2246),i=n(9276),s=n(2676);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function g(e){if(!o.Z.canUseDOM)return e?u:d}function m(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function b(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function h(e){let{lazy:t,...n}=e;const r=t?b:m;return(0,s.jsx)(r,{...n})}},6701:(e,t,n)=>{"use strict";n.d(t,{n:()=>m,p:()=>g});var r=n(5271),o=n(6594),a=n(1118),i=n(8274),s=n(9364),l=n(2676);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},7934:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>b});var r=n(5271),o=n(6593),a=n(8274),i=n(1118),s=n(9364),l=n(2676);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,g=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function b(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(c);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},8568:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>g});var r=n(5271),o=n(3158),a=n(3320),i=n(3225),s=n(8274);function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(9364),u=n(2676);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function g(){const e=r.useContext(d);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3158:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(5271),o=n(8274),a=n(2676);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},8451:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(5271);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3320:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(5271),o=n(6593);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},3509:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},9276:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2347:(e,t,n)=>{"use strict";function r(e){return Array.from(new Set(e))}function o(e,t){const n={};let r=0;for(const o of e){const e=t(o,r);n[e]??=[],n[e].push(o),r+=1}return n}n.d(t,{jj:()=>r,vM:()=>o})},9967:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(5271),o=n(4814),a=n(2791),i=n(4268),s=n(285),l=n(6172);var c=n(2676);function u(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const u=function(e){const{siteConfig:t}=(0,l.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.Cg)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.Z,{children:[t&&(0,c.jsx)("title",{children:u}),t&&(0,c.jsx)("meta",{property:"og:title",content:u}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.Z)(i,t);return(0,c.jsxs)(d.Provider,{value:s,children:[(0,c.jsx)(a.Z,{children:(0,c.jsx)("html",{className:s})}),n]})}function f(e){let{children:t}=e;const n=(0,i.Z)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,o.Z)(r,a),children:t})}},8274:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(5271),o=n(2246),a=n(2676);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(? \w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},6422:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(5271),o=n(7297),a=n(6172);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},1309:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>p});var r=n(5271),o=n(6593),a=n(6594),i=(n(2246),n(8274)),s=n(2676);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},9247:(e,t,n)=>{"use strict";n.d(t,{H:()=>r});const r="default"},1118:(e,t,n)=>{"use strict";n.d(t,{WA:()=>c});n(5271);const r=JSON.parse('{"d":"localStorage","u":""}'),o=r.d;function a(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.u}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?l:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},9897:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(6172),o=n(3225),a=n(5678);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.Do)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},4890:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(5271),o=n(3225),a=n(8274);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},9364:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(6172);function o(){return(0,r.Z)().siteConfig.themeConfig}},3790:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,c=n,c?o(l):a(l));var l,c;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(3826);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},9725:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},5678:(e,t,n)=>{"use strict";t.BN=t.Do=t.uR=void 0;const r=n(5862);t.uR="__blog-post-container";var o=n(3790);Object.defineProperty(t,"Do",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(3826);var i=n(9725);Object.defineProperty(t,"BN",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},3826:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1925:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r=n(6809),o=Object.assign||function(e){for(var t=1;t 1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(e){function t(){}e(t,t)},a=function(){for(var e=arguments.length,t=Array(e),n=0;n 0&&void 0!==arguments[0]?arguments[0]:{}).target,t=function(){var e={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},t=void 0,n=void 0;if(h.container)if(h.container instanceof Object)t=(e=o({},e,h.container)).width-e.left-e.right-2*h.margin,n=e.height-e.top-e.bottom-2*h.margin;else{var r=(i(h.container)?h.container:document.querySelector(h.container)).getBoundingClientRect(),a=r.width,l=r.height,c=r.left,u=r.top;e=o({},e,{width:a,height:l,left:c,top:u})}t=t||e.width-2*h.margin,n=n||e.height-2*h.margin;var d=y.zoomedHd||y.original,p=s(d)?t:d.naturalWidth||t,f=s(d)?n:d.naturalHeight||n,g=d.getBoundingClientRect(),m=g.top,b=g.left,v=g.width,_=g.height,w=Math.min(Math.max(v,p),t)/v,x=Math.min(Math.max(_,f),n)/_,S=Math.min(w,x),k="scale("+S+") translate3d("+((t-v)/2-b+h.margin+e.left)/S+"px, "+((n-_)/2-m+h.margin+e.top)/S+"px, 0)";y.zoomed.style.transform=k,y.zoomedHd&&(y.zoomedHd.style.transform=k)};return new r((function(n){if(e&&-1===f.indexOf(e))n(_);else{if(y.zoomed)n(_);else{if(e)y.original=e;else{if(!(f.length>0))return void n(_);var r=f;y.original=r[0]}if(y.original.dispatchEvent(c("medium-zoom:open",{detail:{zoom:_}})),b=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,m=!0,y.zoomed=function(e){var t=e.getBoundingClientRect(),n=t.top,r=t.left,o=t.width,a=t.height,i=e.cloneNode(),s=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,l=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return i.removeAttribute("id"),i.style.position="absolute",i.style.top=n+s+"px",i.style.left=r+l+"px",i.style.width=o+"px",i.style.height=a+"px",i.style.transform="",i}(y.original),document.body.appendChild(v),h.template){var o=i(h.template)?h.template:document.querySelector(h.template);y.template=document.createElement("div"),y.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(y.template)}if(y.original.parentElement&&"PICTURE"===y.original.parentElement.tagName&&y.original.currentSrc&&(y.zoomed.src=y.original.currentSrc),document.body.appendChild(y.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),y.original.classList.add("medium-zoom-image--hidden"),y.zoomed.classList.add("medium-zoom-image--opened"),y.zoomed.addEventListener("click",d),y.zoomed.addEventListener("transitionend",(function e(){m=!1,y.zoomed.removeEventListener("transitionend",e),y.original.dispatchEvent(c("medium-zoom:opened",{detail:{zoom:_}})),n(_)})),y.original.getAttribute("data-zoom-src")){y.zoomedHd=y.zoomed.cloneNode(),y.zoomedHd.removeAttribute("srcset"),y.zoomedHd.removeAttribute("sizes"),y.zoomedHd.removeAttribute("loading"),y.zoomedHd.src=y.zoomed.getAttribute("data-zoom-src"),y.zoomedHd.onerror=function(){clearInterval(a),console.warn("Unable to reach the zoom image target "+y.zoomedHd.src),y.zoomedHd=null,t()};var a=setInterval((function(){y.zoomedHd.complete&&(clearInterval(a),y.zoomedHd.classList.add("medium-zoom-image--opened"),y.zoomedHd.addEventListener("click",d),document.body.appendChild(y.zoomedHd),t())}),10)}else if(y.original.hasAttribute("srcset")){y.zoomedHd=y.zoomed.cloneNode(),y.zoomedHd.removeAttribute("sizes"),y.zoomedHd.removeAttribute("loading");var s=y.zoomedHd.addEventListener("load",(function(){y.zoomedHd.removeEventListener("load",s),y.zoomedHd.classList.add("medium-zoom-image--opened"),y.zoomedHd.addEventListener("click",d),document.body.appendChild(y.zoomedHd),t()}))}else t()}}}))},d=function(){return new r((function(e){if(!m&&y.original){m=!0,document.body.classList.remove("medium-zoom--opened"),y.zoomed.style.transform="",y.zoomedHd&&(y.zoomedHd.style.transform=""),y.template&&(y.template.style.transition="opacity 150ms",y.template.style.opacity=0),y.original.dispatchEvent(c("medium-zoom:close",{detail:{zoom:_}})),y.zoomed.addEventListener("transitionend",(function t(){y.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(y.zoomed),y.zoomedHd&&document.body.removeChild(y.zoomedHd),document.body.removeChild(v),y.zoomed.classList.remove("medium-zoom-image--opened"),y.template&&document.body.removeChild(y.template),m=!1,y.zoomed.removeEventListener("transitionend",t),y.original.dispatchEvent(c("medium-zoom:closed",{detail:{zoom:_}})),y.original=null,y.zoomed=null,y.zoomedHd=null,y.template=null,e(_)}))}else e(_)}))},p=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).target;return y.original?d():u({target:e})},f=[],g=[],m=!1,b=0,h=n,y={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(t)?h=t:(t||"string"==typeof t)&&a(t);var v=function(e){var t=document.createElement("div");return t.classList.add("medium-zoom-overlay"),t.style.background=e,t}((h=o({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},h)).background);document.addEventListener("click",(function(e){var t=e.target;t!==v?-1!==f.indexOf(t)&&p({target:t}):d()})),document.addEventListener("keyup",(function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||d()})),document.addEventListener("scroll",(function(){if(!m&&y.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(b-e)>h.scrollOffset&&setTimeout(d,150)}})),window.addEventListener("resize",d);var _={open:u,close:d,toggle:p,update:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(v.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=o({},h.container,e.container)),e.template){var n=i(e.template)?e.template:document.querySelector(e.template);t.template=n}return h=o({},h,t),f.forEach((function(e){e.dispatchEvent(c("medium-zoom:update",{detail:{zoom:_}}))})),_},clone:function(){return e(o({},h,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))},attach:a,detach:function(){for(var e=arguments.length,t=Array(e),n=0;n 0?t.reduce((function(e,t){return[].concat(e,l(t))}),[]):f;return r.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(c("medium-zoom:detach",{detail:{zoom:_}}))})),f=f.filter((function(e){return-1===r.indexOf(e)})),_},on:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f.forEach((function(r){r.addEventListener("medium-zoom:"+e,t,n)})),g.push({type:"medium-zoom:"+e,listener:t,options:n}),_},off:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return f.forEach((function(r){r.removeEventListener("medium-zoom:"+e,t,n)})),g=g.filter((function(n){return!(n.type==="medium-zoom:"+e&&n.listener.toString()===t.toString())})),_},getOptions:function(){return h},getImages:function(){return f},getZoomedImage:function(){return y.original}};return _},{themeConfig:d}=r.default;function p(e){var t,n;return document.querySelector('html[data-theme="dark"]')?(null===(t=e.background)||void 0===t?void 0:t.dark)||"rgb(50, 50, 50)":(null===(n=e.background)||void 0===n?void 0:n.light)||"rgb(255, 255, 255)"}const f=function(){if("undefined"==typeof window)return null;let e;const{zoom:t}=d,{selector:n=".markdown img",config:r={}}=t||{};if(!t)return null;r.background=p(t);var o=new MutationObserver((function(){e&&e.update({background:p(t)})}));const a=document.querySelector("html");return o.observe(a,{attributes:!0,attributeFilter:["data-theme"]}),setTimeout((()=>{e&&e.detach(),e=u(n,r)}),1e3),{onRouteUpdate(){setTimeout((()=>{e&&e.detach(),e=u(n,r)}),1e3)}}}()},4047:(e,t,n)=>{"use strict";n.d(t,{lX:()=>_,q_:()=>O,ob:()=>f,PP:()=>P,Ep:()=>p});var r=n(6920);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r =0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(8624);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,m(),_.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(_.entries[_.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=_.index+e;return t>=0&&t<_.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return _}},2535:(e,t,n)=>{"use strict";var r=n(6237),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var o=f(n);o&&o!==g&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),b=0;b {"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},901:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2e3:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n 1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var c=function(){--s<=0&&a(l)};s||c(),i.forEach((function(t){e.matches(t,o.exclude)?c():o.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),c()}),c)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),s=[],l=[],c=void 0,u=void 0,d=function(){var e=a.getIteratorNode(i);return u=e.prevNode,c=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(c,u,e,s)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return l.push(e)}),r)})),l.push(c);l.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(s,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var c=t-i.start,u=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),p=e.value.substr(u+i.start);if(i.node=a.wrapRangeInTextNode(i.node,c,u),e.value=d+p,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=u),e.nodes[n].end-=u)})),n-=u,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l{"use strict";n.r(t)},4798:(e,t,n)=>{"use strict";n.r(t)},9981:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:' '};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7720:(e,t,n)=>{var r=n(901);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var g=e[i],m=n[2],b=n[3],h=n[4],y=n[5],v=n[6],_=n[7];s&&(r.push(s),s="");var w=null!=m&&null!=g&&g!==m,x="+"===v||"*"===v,S="?"===v||"*"===v,k=n[2]||u,E=h||y;r.push({name:b||a++,prefix:m||"",delimiter:k,optional:S,repeat:x,partial:w,asterisk:!!_,pattern:E?c(E):_?".*":"[^"+l(k)+"]+?"})}}return i {!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i {Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},1559:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l =a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),g=p.indexOf(f);if(g>-1){++o;var m=p.substring(0,g),b=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),h=p.substring(g+f.length),y=[];m&&y.push.apply(y,i([m])),y.push(b),h&&y.push.apply(y,i([h])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},4049:(e,t,n)=>{"use strict";var r=n(6257);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},507:(e,t,n)=>{e.exports=n(4049)()},6257:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},6521:(e,t,n)=>{"use strict";var r=n(5271),o=n(7537);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(g,e)||!d.call(f,e)&&(p.test(e)?g[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(h,y);b[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(h,y);b[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(h,y);b[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var _=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,w=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),k=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),O=Symbol.for("react.provider"),j=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),C=Symbol.for("react.suspense"),T=Symbol.for("react.suspense_list"),I=Symbol.for("react.memo"),A=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var L=Symbol.iterator;function R(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=L&&e[L]||e["@@iterator"])?e:null}var D,F=Object.assign;function M(e){if(void 0===D)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);D=t&&t[1]||""}return"\n"+D+e}var z=!1;function B(e,t){if(!e||z)return"";z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes(" ")&&(l=l.replace(" ",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?M(e):""}function $(e){switch(e.tag){case 5:return M(e.type);case 16:return M("Lazy");case 13:return M("Suspense");case 19:return M("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case x:return"Portal";case E:return"Profiler";case k:return"StrictMode";case C:return"Suspense";case T:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case j:return(e.displayName||"Context")+".Consumer";case O:return(e._context.displayName||"Context")+".Provider";case P:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case I:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case A:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===k?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Z(e){e._valueTracker||(e._valueTracker=function(e){var t=V(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function G(e,t){var n=t.checked;return F({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function K(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){K(e,t);var n=Q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,Q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o "+t.valueOf().toString()+"",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ge=["Webkit","ms","Moz","O"];function me(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function be(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=me(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){ge.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var he=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(he[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var _e=null;function we(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,ke=null;function Ee(e){if(e=_o(e)){if("function"!=typeof xe)throw Error(a(280));var t=e.stateNode;t&&(t=xo(t),xe(e.stateNode,e.type,t))}}function Oe(e){Se?ke?ke.push(e):ke=[e]:Se=e}function je(){if(Se){var e=Se,t=ke;if(ke=Se=null,Ee(e),t)for(e=0;e >>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0 n;n++)t.push(e);return t}function ht(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1< =Rn),Mn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Nn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Hn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Qn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Hn[e.type]:"textarea"===t}function Vn(e,t,n,r){Oe(r),0<(t=Zr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Zn=null,Wn=null;function qn(e){Mr(e,0)}function Gn(e){if(W(wo(e)))return e}function Yn(e,t){if("change"===e)return t}var Kn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Kn=Xn&&(!document.documentMode||9 =t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=q((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function gr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n =document.documentMode,br=null,hr=null,yr=null,vr=!1;function _r(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==br||br!==q(r)||("selectionStart"in(r=br)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Zr(hr,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}function wr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:wr("Animation","AnimationEnd"),animationiteration:wr("Animation","AnimationIteration"),animationstart:wr("Animation","AnimationStart"),transitionend:wr("Transition","TransitionEnd")},Sr={},kr={};function Er(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in kr)return Sr[e]=n[t];return e}u&&(kr=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Or=Er("animationend"),jr=Er("animationiteration"),Pr=Er("animationstart"),Cr=Er("transitionend"),Tr=new Map,Ir="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ar(e,t){Tr.set(e,t),l(t,[e])}for(var Nr=0;Nr ko||(e.current=So[ko],So[ko]=null,ko--)}function jo(e,t){ko++,So[ko]=e.current,e.current=t}var Po={},Co=Eo(Po),To=Eo(!1),Io=Po;function Ao(e,t){var n=e.type.contextTypes;if(!n)return Po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function No(e){return null!=(e=e.childContextTypes)}function Lo(){Oo(To),Oo(Co)}function Ro(e,t,n){if(Co.current!==Po)throw Error(a(168));jo(Co,t),jo(To,n)}function Do(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,H(e)||"Unknown",o));return F({},n,r)}function Fo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Po,Io=Co.current,jo(Co,e),jo(To,To.current),!0}function Mo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Do(e,t,Io),r.__reactInternalMemoizedMergedChildContext=e,Oo(To),Oo(Co),jo(Co,e)):Oo(To),jo(To,n)}var zo=null,Bo=!1,$o=!1;function Uo(e){null===zo?zo=[e]:zo.push(e)}function Ho(){if(!$o&&null!==zo){$o=!0;var e=0,t=vt;try{var n=zo;for(vt=1;e >=i,o-=i,Ko=1<<32-it(t)+o|n< m?(b=d,d=null):b=d.sibling;var h=f(o,d,s[m],l);if(null===h){null===d&&(d=b);break}e&&d&&null===h.alternate&&t(o,d),a=i(h,a,m),null===u?c=h:u.sibling=h,u=h,d=b}if(m===s.length)return n(o,d),aa&&Jo(o,m),c;if(null===d){for(;m b?(h=m,m=null):h=m.sibling;var v=f(o,m,y.value,c);if(null===v){null===m&&(m=h);break}e&&m&&null===v.alternate&&t(o,m),s=i(v,s,b),null===d?u=v:d.sibling=v,d=v,m=h}if(y.done)return n(o,m),aa&&Jo(o,b),u;if(null===m){for(;!y.done;b++,y=l.next())null!==(y=p(o,y.value,c))&&(s=i(y,s,b),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,b),u}for(m=r(o,m);!y.done;b++,y=l.next())null!==(y=g(m,o,b,y.value,c))&&(e&&null!==y.alternate&&m.delete(null===y.key?b:y.key),s=i(y,s,b),null===d?u=y:d.sibling=y,d=y);return e&&m.forEach((function(e){return t(o,e)})),aa&&Jo(o,b),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case w:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===A&&va(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=ha(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((a=Rc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Lc(i.type,i.key,i.props,null,r.mode,l)).ref=ha(r,a,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Mc(i,r.mode,l)).return=r,r=a}return s(r);case A:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return m(r,a,i,l);if(R(i))return b(r,a,i,l);ya(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Fc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var wa=_a(!0),xa=_a(!1),Sa=Eo(null),ka=null,Ea=null,Oa=null;function ja(){Oa=Ea=ka=null}function Pa(e){var t=Sa.current;Oo(Sa),e._currentValue=t}function Ca(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Ta(e,t){ka=e,Oa=Ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(vs=!0),e.firstContext=null)}function Ia(e){var t=e._currentValue;if(Oa!==e)if(e={context:e,memoizedValue:t,next:null},null===Ea){if(null===ka)throw Error(a(308));Ea=e,ka.dependencies={lanes:0,firstContext:e}}else Ea=Ea.next=e;return t}var Aa=null;function Na(e){null===Aa?Aa=[e]:Aa.push(e)}function La(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Na(t)):(n.next=o.next,o.next=n),t.interleaved=n,Ra(e,r)}function Ra(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Da=!1;function Fa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ma(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function za(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Pl)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Ra(e,n)}return null===(o=r.interleaved)?(t.next=t,Na(r)):(t.next=o.next,o.next=t),r.interleaved=t,Ra(e,n)}function $a(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Ua(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Ha(e,t,n,r){var o=e.updateQueue;Da=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=e,m=s;switch(p=t,f=n,m.tag){case 1:if("function"==typeof(g=m.payload)){d=g.call(f,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p="function"==typeof(g=m.payload)?g.call(f,d,p):g))break e;d=F({},d,p);break e;case 2:Da=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Dl|=i,e.lanes=i,e.memoizedState=d}}function Qa(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t n?n:4,e(!0);var r=ai.transition;ai.transition={};try{e(!1),t()}finally{vt=n,ai.transition=r}}function Zi(){return vi().memoizedState}function Wi(e,t,n){var r=tc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Gi(e))Yi(t,n);else if(null!==(n=La(e,t,n,r))){nc(n,e,r,ec()),Ki(n,t,r)}}function qi(e,t,n){var r=tc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Gi(e))Yi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Na(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=La(e,t,o,r))&&(nc(n,e,r,o=ec()),Ki(n,t,r))}}function Gi(e){var t=e.alternate;return e===si||null!==t&&t===si}function Yi(e,t){di=ui=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ki(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var Xi={readContext:Ia,useCallback:gi,useContext:gi,useEffect:gi,useImperativeHandle:gi,useInsertionEffect:gi,useLayoutEffect:gi,useMemo:gi,useReducer:gi,useRef:gi,useState:gi,useDebugValue:gi,useDeferredValue:gi,useTransition:gi,useMutableSource:gi,useSyncExternalStore:gi,useId:gi,unstable_isNewReconciler:!1},Ji={readContext:Ia,useCallback:function(e,t){return yi().memoizedState=[e,void 0===t?null:t],e},useContext:Ia,useEffect:Ri,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ni(4194308,4,zi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ni(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ni(4,2,e,t)},useMemo:function(e,t){var n=yi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=yi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Wi.bind(null,si,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},yi().memoizedState=e},useState:Ti,useDebugValue:$i,useDeferredValue:function(e){return yi().memoizedState=e},useTransition:function(){var e=Ti(!1),t=e[0];return e=Vi.bind(null,e[1]),yi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=si,o=yi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Cl)throw Error(a(349));0!=(30&ii)||Ei(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Ri(ji.bind(null,r,i,e),[e]),r.flags|=2048,Ii(9,Oi.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=yi(),t=Cl.identifierPrefix;if(aa){var n=Xo;t=":"+t+"R"+(n=(Ko&~(1<<32-it(Ko)-1)).toString(32)+n),0<(n=pi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=fi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},es={readContext:Ia,useCallback:Ui,useContext:Ia,useEffect:Di,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:Hi,useReducer:wi,useRef:Ai,useState:function(){return wi(_i)},useDebugValue:$i,useDeferredValue:function(e){return Qi(vi(),li.memoizedState,e)},useTransition:function(){return[wi(_i)[0],vi().memoizedState]},useMutableSource:Si,useSyncExternalStore:ki,useId:Zi,unstable_isNewReconciler:!1},ts={readContext:Ia,useCallback:Ui,useContext:Ia,useEffect:Di,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:Hi,useReducer:xi,useRef:Ai,useState:function(){return xi(_i)},useDebugValue:$i,useDeferredValue:function(e){var t=vi();return null===li?t.memoizedState=e:Qi(t,li.memoizedState,e)},useTransition:function(){return[xi(_i)[0],vi().memoizedState]},useMutableSource:Si,useSyncExternalStore:ki,useId:Zi,unstable_isNewReconciler:!1};function ns(e,t){if(e&&e.defaultProps){for(var n in t=F({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}function rs(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:F({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var os={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ec(),r=tc(e),o=za(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ba(e,o,r))&&(nc(t,e,r,n),$a(t,e,r))}};function as(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function is(e,t,n){var r=!1,o=Po,a=t.contextType;return"object"==typeof a&&null!==a?a=Ia(a):(o=No(t)?Io:Co.current,a=(r=null!=(r=t.contextTypes))?Ao(e,o):Po),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=os,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function ss(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&os.enqueueReplaceState(t,t.state,null)}function ls(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs={},Fa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ia(a):(a=No(t)?Io:Co.current,o.context=Ao(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(rs(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&os.enqueueReplaceState(o,o.state,null),Ha(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function cs(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function us(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ds(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var ps="function"==typeof WeakMap?WeakMap:Map;function fs(e,t,n){(n=za(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ql||(Ql=!0,Vl=r),ds(0,t)},n}function gs(e,t,n){(n=za(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ds(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ds(0,t),"function"!=typeof r&&(null===Zl?Zl=new Set([this]):Zl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function ms(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ps;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Ec.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function hs(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=za(-1,1)).tag=2,Ba(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var ys=_.ReactCurrentOwner,vs=!1;function _s(e,t,n,r){t.child=null===e?xa(t,null,n,r):wa(t,e.child,n,r)}function ws(e,t,n,r,o){n=n.render;var a=t.ref;return Ta(t,o),r=bi(e,t,n,r,a,o),n=hi(),null===e||vs?(aa&&n&&ta(t),t.flags|=1,_s(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Qs(e,t,o))}function xs(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Ac(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Lc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Ss(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Qs(e,t,o)}return t.flags|=1,(e=Nc(a,r)).ref=t.ref,e.return=t,t.child=e}function Ss(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(vs=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Qs(e,t,o);0!=(131072&e.flags)&&(vs=!0)}}return Os(e,t,n,r,o)}function ks(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},jo(Nl,Al),Al|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,jo(Nl,Al),Al|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,jo(Nl,Al),Al|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,jo(Nl,Al),Al|=r;return _s(e,t,o,n),t.child}function Es(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Os(e,t,n,r,o){var a=No(n)?Io:Co.current;return a=Ao(t,a),Ta(t,o),n=bi(e,t,n,r,a,o),r=hi(),null===e||vs?(aa&&r&&ta(t),t.flags|=1,_s(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Qs(e,t,o))}function js(e,t,n,r,o){if(No(n)){var a=!0;Fo(t)}else a=!1;if(Ta(t,o),null===t.stateNode)Hs(e,t),is(t,n,r),ls(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Ia(c):c=Ao(t,c=No(n)?Io:Co.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&ss(t,i,r,c),Da=!1;var p=t.memoizedState;i.state=p,Ha(t,r,i,o),l=t.memoizedState,s!==r||p!==l||To.current||Da?("function"==typeof u&&(rs(t,n,u,r),l=t.memoizedState),(s=Da||as(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Ma(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ns(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Ia(l):l=Ao(t,l=No(n)?Io:Co.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&ss(t,i,r,l),Da=!1,p=t.memoizedState,i.state=p,Ha(t,r,i,o);var g=t.memoizedState;s!==d||p!==g||To.current||Da?("function"==typeof f&&(rs(t,n,f,r),g=t.memoizedState),(c=Da||as(t,n,c,r,p,g,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,g,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,g,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=g),i.props=r,i.state=g,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Ps(e,t,n,r,a,o)}function Ps(e,t,n,r,o,a){Es(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Mo(t,n,!1),Qs(e,t,a);r=t.stateNode,ys.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=wa(t,e.child,null,a),t.child=wa(t,null,s,a)):_s(e,t,s,a),t.memoizedState=r.state,o&&Mo(t,n,!0),t.child}function Cs(e){var t=e.stateNode;t.pendingContext?Ro(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ro(0,t.context,!1),Ya(e,t.containerInfo)}function Ts(e,t,n,r,o){return ga(),ma(o),t.flags|=256,_s(e,t,n,r),t.child}var Is,As,Ns,Ls,Rs={dehydrated:null,treeContext:null,retryLane:0};function Ds(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fs(e,t,n){var r,o=t.pendingProps,i=ei.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),jo(ei,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Dc(l,o,0,null),e=Rc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Ds(n),t.memoizedState=Rs,e):Ms(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=us(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Dc({mode:"visible",children:r.children},o,0,null),(i=Rc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&wa(t,e.child,null,s),t.child.memoizedState=Ds(s),t.memoizedState=Rs,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=us(i=Error(a(419)),r,void 0))}if(l=0!=(s&e.childLanes),vs||l){if(null!==(r=Cl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Ra(e,o),nc(r,e,o,-1))}return mc(),zs(e,t,s,r=us(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=jc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(qo[Go++]=Ko,qo[Go++]=Xo,qo[Go++]=Yo,Ko=e.id,Xo=e.overflow,Yo=t),t=Ms(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Nc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Nc(r,s):(s=Rc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Ds(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Rs,o}return e=(s=e.child).sibling,o=Nc(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ms(e,t){return(t=Dc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ma(r),wa(t,e.child,null,n),(e=Ms(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Ca(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Us(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(_s(e,t,r.children,n),0!=(2&(r=ei.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(jo(ei,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ti(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ti(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Qs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Dl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Nc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Nc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Vs(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Zs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Ws(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Zs(t),null;case 1:case 17:return No(t.type)&&Lo(),Zs(t),null;case 3:return r=t.stateNode,Ka(),Oo(To),Oo(Co),ri(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(ic(ia),ia=null))),As(e,t),Zs(t),null;case 5:Ja(t);var o=Ga(qa.current);if(n=t.type,null!==e&&null!=t.stateNode)Ns(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Zs(t),null}if(e=Ga(Za.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[go]=i,e=0!=(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(o=0;o <\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[go]=r,Is(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":zr("cancel",e),zr("close",e),o=r;break;case"iframe":case"object":case"embed":zr("load",e),o=r;break;case"video":case"audio":for(o=0;o Ul&&(t.flags|=128,r=!0,Vs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ti(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Vs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return Zs(t),null}else 2*Ke()-i.renderingStartTime>Ul&&1073741824!==n&&(t.flags|=128,r=!0,Vs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ke(),t.sibling=null,n=ei.current,jo(ei,r?1&n|2:1&n),t):(Zs(t),null);case 22:case 23:return dc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Al)&&(Zs(t),6&t.subtreeFlags&&(t.flags|=8192)):Zs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function qs(e,t){switch(na(t),t.tag){case 1:return No(t.type)&&Lo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return Ka(),Oo(To),Oo(Co),ri(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return Ja(t),null;case 13:if(Oo(ei),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ga()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Oo(ei),null;case 4:return Ka(),null;case 10:return Pa(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Is=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},As=function(){},Ns=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Ga(Za.current);var a,i=null;switch(n){case"input":o=G(e,o),r=G(e,r),i=[];break;case"select":o=F({},o,{value:void 0}),r=F({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Ls=function(e,t,n,r){n!==r&&(t.flags|=4)};var Gs=!1,Ys=!1,Ks="function"==typeof WeakSet?WeakSet:Set,Xs=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){kc(e,t,r)}else n.current=null}function el(e,t,n){try{n()}catch(r){kc(e,t,r)}}var tl=!1;function nl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&el(t,n,a)}o=o.next}while(o!==r)}}function rl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function al(e){var t=e.alternate;null!==t&&(e.alternate=null,al(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[go],delete t[bo],delete t[ho],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function sl(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ll(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(ll(e,t,n),e=e.sibling;null!==e;)ll(e,t,n),e=e.sibling}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}var ul=null,dl=!1;function pl(e,t,n){for(n=n.child;null!==n;)fl(e,t,n),n=n.sibling}function fl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Ys||Js(n,t);case 6:var r=ul,o=dl;ul=null,pl(e,t,n),dl=o,null!==(ul=r)&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):ul.removeChild(n.stateNode));break;case 18:null!==ul&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),Ut(e)):lo(ul,n.stateNode));break;case 4:r=ul,o=dl,ul=n.stateNode.containerInfo,dl=!0,pl(e,t,n),ul=r,dl=o;break;case 0:case 11:case 14:case 15:if(!Ys&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&el(n,t,i),o=o.next}while(o!==r)}pl(e,t,n);break;case 1:if(!Ys&&(Js(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){kc(n,t,s)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:1&n.mode?(Ys=(r=Ys)||null!==n.memoizedState,pl(e,t,n),Ys=r):pl(e,t,n);break;default:pl(e,t,n)}}function gl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Ks),t.forEach((function(t){var r=Pc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function ml(e,t){var n=t.deletions;if(null!==n)for(var r=0;r o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Ke()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*kl(r/1960))-r)){e.timeoutHandle=ro(wc.bind(null,e,Bl,Hl),r);break}wc(e,Bl,Hl);break;default:throw Error(a(329))}}}return rc(e,Ke()),e.callbackNode===n?oc.bind(null,e):null}function ac(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=Bl,Bl=n,null!==t&&ic(t)),e}function ic(e){null===Bl?Bl=e:Bl.push.apply(Bl,e)}function sc(e,t){for(t&=~Ml,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0 e?16:e,null===ql)var r=!1;else{if(e=ql,ql=null,Gl=0,0!=(6&Pl))throw Error(a(331));var o=Pl;for(Pl|=4,Xs=e.current;null!==Xs;){var i=Xs,s=i.child;if(0!=(16&Xs.flags)){var l=i.deletions;if(null!==l){for(var c=0;c Ke()-$l?pc(e,0):Ml|=n),rc(e,t)}function Oc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=ec();null!==(e=Ra(e,t))&&(ht(e,t,n),rc(e,n))}function jc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Oc(e,n)}function Pc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Oc(e,n)}function Cc(e,t){return We(e,t)}function Tc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ic(e,t,n,r){return new Tc(e,t,n,r)}function Ac(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Nc(e,t){var n=e.alternate;return null===n?((n=Ic(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Lc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Ac(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Rc(n.children,o,i,t);case k:s=8,o|=8;break;case E:return(e=Ic(12,n,t,2|o)).elementType=E,e.lanes=i,e;case C:return(e=Ic(13,n,t,o)).elementType=C,e.lanes=i,e;case T:return(e=Ic(19,n,t,o)).elementType=T,e.lanes=i,e;case N:return Dc(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case O:s=10;break e;case j:s=9;break e;case P:s=11;break e;case I:s=14;break e;case A:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Ic(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Rc(e,t,n,r){return(e=Ic(7,e,r,t)).lanes=n,e}function Dc(e,t,n,r){return(e=Ic(22,e,r,t)).elementType=N,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Ic(6,e,null,t)).lanes=n,e}function Mc(e,t,n){return(t=Ic(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=bt(0),this.expirationTimes=bt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=bt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bc(e,t,n,r,o,a,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Ic(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fa(a),e}function $c(e){if(!e)return Po;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(No(n))return Do(e,n,t)}return t}function Uc(e,t,n,r,o,a,i,s,l){return(e=Bc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=za(r=ec(),o=tc(n))).callback=null!=t?t:null,Ba(n,a,o),e.current.lanes=o,ht(e,o,r),rc(e,r),e}function Hc(e,t,n,r){var o=t.current,a=ec(),i=tc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=za(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ba(o,t,i))&&(nc(e,o,i,a),$a(e,o,i)),i}function Qc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Vc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n {"use strict";var r=n(967);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},967:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(6521)},5154:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},3810:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(5271),o=n(507),a=n.n(o),i=n(5154),s=n.n(i),l=n(3670),c=n.n(l),u=n(631),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t =0||(o[n]=e[n]);return o}var b={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},h={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},_=Object.keys(b).map((function(e){return b[e]})),w={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(w).reduce((function(e,t){return e[w[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},k=function(e){var t=S(e,b.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},E=function(e){return S(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},j=function(e,t){return t.filter((function(e){return void 0!==e[b.BASE]})).map((function(e){return e[b.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o /g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[w[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=w[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},M=function(e,t,n){switch(e){case b.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(b.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=T(t);return o?"<"+e+' data-rh="true" '+o+">"+L(a,r)+""+e+">":"<"+e+' data-rh="true">'+L(a,r)+""+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+L(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+""+e+">")}),"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var g=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=I(e.metaTags,v),a=I(t,h),i=I(n,y);return{priorityMethods:{toComponent:function(){return[].concat(F(b.META,o.priority),F(b.LINK,a.priority),F(b.SCRIPT,i.priority))},toString:function(){return M(b.META,o.priority,r)+" "+M(b.LINK,a.priority,r)+" "+M(b.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=g.priorityMethods,u=g.linkTags,d=g.metaTags,p=g.scriptTags}return{priority:f,base:M(b.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(b.LINK,u,r),meta:M(b.META,d,r),noscript:M(b.NOSCRIPT,a,r),script:M(b.SCRIPT,p,r),style:M(b.STYLE,i,r),title:M(b.TITLE,{title:l,titleAttributes:c},r)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),Q="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=Q,V.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var Z=function(e,t){var n,r=document.head||document.querySelector(b.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s =0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;W(b.BODY,e.bodyAttributes),W(b.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=T(e)),W(b.TITLE,t)}(u,d);var p={baseTag:Z(b.BASE,n),linkTags:Z(b.LINK,o),metaTags:Z(b.META,a),noscriptTags:Z(b.NOSCRIPT,i),scriptTags:Z(b.SCRIPT,l),styleTags:Z(b.STYLE,c)},f={},g={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(g[e]=p[e].oldTags)})),t&&t(),s(e,f,g)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case b.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case b.BODY:return p({},o,{bodyAttributes:p({},a)});case b.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(_.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+_.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,K),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case b.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case b.LINK:case b.META:case b.NOSCRIPT:case b.SCRIPT:case b.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,X),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},198:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,b=n?Symbol.for("react.lazy"):60116,h=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,_=n?Symbol.for("react.scope"):60119;function w(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case b:case m:case l:return e;default:return t}}case o:return t}}}function x(e){return w(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=b,t.Memo=m,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||w(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return w(e)===c},t.isContextProvider=function(e){return w(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return w(e)===p},t.isFragment=function(e){return w(e)===a},t.isLazy=function(e){return w(e)===b},t.isMemo=function(e){return w(e)===m},t.isPortal=function(e){return w(e)===o},t.isProfiler=function(e){return w(e)===s},t.isStrictMode=function(e){return w(e)===i},t.isSuspense=function(e){return w(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===b||e.$$typeof===m||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===_||e.$$typeof===h)},t.typeOf=w},6237:(e,t,n)=>{"use strict";e.exports=n(198)},7677:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(3225),o=n(6920),a=n(5271);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},8594:(e,t,n)=>{"use strict";n.d(t,{OL:()=>_,UT:()=>d,VK:()=>u,rU:()=>h});var r=n(3225),o=n(2666),a=n(5271),i=n(4047),s=n(6920),l=n(3804),c=n(8624),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o {"use strict";n.d(t,{AW:()=>k,F0:()=>v,LX:()=>S,TH:()=>N,k6:()=>A,rs:()=>T,s6:()=>y});var r=n(2666),o=n(5271),a=n(507),i=n.n(a),s=n(4047),l=n(8624),c=n(6920),u=n(7720),d=n.n(u),p=(n(6237),n(3804)),f=(n(2535),1073741823),g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var m=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return g[e]=(g[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i {"use strict";var r=n(5271),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},7596:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,b={};function h(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||g}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||g}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=h.prototype;var _=v.prototype=new y;_.constructor=v,m(_,h.prototype),_.isPureReactComponent=!0;var w=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},k={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,o)&&!k.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1 {"use strict";e.exports=n(7596)},2676:(e,t,n)=>{"use strict";e.exports=n(8193)},8088:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0 >>1,o=e[r];if(!(0>>1;ra(l,n))c a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,g=!1,m=!1,b=!1,h="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function _(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function w(e){if(b=!1,_(e),!m)if(null!==r(c))m=!0,N(x);else{var t=r(u);null!==t&&L(w,t.startTime-e)}}function x(e,n){m=!1,b&&(b=!1,y(O),O=-1),g=!0;var a=f;try{for(_(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!C());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),_(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&L(w,d.startTime-n),l=!1}return l}finally{p=null,f=a,g=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,k=!1,E=null,O=-1,j=5,P=-1;function C(){return!(t.unstable_now()-P e||125 i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(b?(y(O),O=-1):b=!0,L(w,a-i))):(e.sortIndex=s,n(c,e),m||g||(m=!0,N(x))),e},t.unstable_shouldYield=C,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},7537:(e,t,n)=>{"use strict";e.exports=n(8088)},631:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l {"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"GameVault",tagline:"the self-hosted gaming platform for drm-free games",favicon:"img/logo.png",url:"https://gamevau.lt",baseUrl:"/",organizationName:"Phalcode",projectName:"gamevault-docs",onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},plugins:[["@docusaurus/plugin-client-redirects",{fromExtensions:["html","htm"],redirects:[{from:"/gamevault-plus",to:"/docs/gamevault-plus/introduction"},{from:"/license",to:"/docs/license-contribute"}]}],"/home/runner/work/gamevault-docs/gamevault-docs/node_modules/.pnpm/docusaurus-plugin-image-zoom@2.0.0_@docusaurus+theme-classic@3.5.2_@types+react@18.2.45_react_6zaxrksshcrr2kvhptvh3gewqe/node_modules/docusaurus-plugin-image-zoom/lib/index.js","/home/runner/work/gamevault-docs/gamevault-docs/node_modules/.pnpm/@cmfcmf+docusaurus-search-local@1.2.0_@docusaurus+core@3.5.2_@docusaurus+types@3.5.2_react-do_ebqvlsi7hqfuk5gfydy2ivw3ca/node_modules/@cmfcmf/docusaurus-search-local/lib/server/index.js",null],presets:[["@docusaurus/preset-classic",{docs:{showLastUpdateAuthor:!0,showLastUpdateTime:!0,sidebarPath:"/home/runner/work/gamevault-docs/gamevault-docs/sidebars.js",editUrl:"https://github.com/phalcode/gamevault-docs/tree/master"},blog:{showReadingTime:!0,editUrl:"https://github.com/phalcode/gamevault-docs/tree/master",blogSidebarCount:"ALL"},theme:{customCss:"/home/runner/work/gamevault-docs/gamevault-docs/src/css/custom.css"}}]],themeConfig:{navbar:{logo:{alt:"GameVault",src:"img/logo.png"},title:"GameVault",items:[{type:"docSidebar",sidebarId:"docs",position:"left",label:"Documentation"},{to:"/blog",label:"Blog",position:"left"},{label:"GameVault+",to:"/docs/gamevault-plus/introduction",position:"left"},{label:"GitHub",href:"https://github.com/phalcode",position:"right"},{label:"Discord",href:"https://discord.gg/NEdNen2dSu",position:"right"},{label:"Support us",href:"https://gamevau.lt/docs/intro#support",position:"right"}],hideOnScroll:!1},footer:{logo:{src:"img/phalcode_bright.png",srcDark:"img/phalcode_dark.png",height:"30vh",href:"https://phalco.de"},links:[{title:"Shortcuts",items:[{label:"Introduction",to:"/docs/intro"},{label:"Blog",to:"/blog"},{label:"Server Setup",to:"/docs/server-docs/setup"},{label:"Troubleshooting",to:"/docs/troubleshooting"}]},{title:"Development",items:[{label:"Roadmap",href:"https://github.com/orgs/Phalcode/projects/4"},{label:"Repositories",href:"https://github.com/orgs/Phalcode/repositories?q=gamevault"}]},{title:"Socials",items:[{label:"Reddit",href:"https://reddit.com/r/Phalcode"},{label:"Lemmy",href:"https://lemmy.world/c/phalcode"},{label:"Discord",href:"https://discord.gg/NEdNen2dSu"}]},{title:"Support us",items:[{label:"Get GameVault+",href:"/docs/gamevault-plus/introduction"},{label:"GitHub Sponsors",href:"https://github.com/sponsors/Phalcode"},{href:"https://ko-fi.com/phalcode",label:"Ko-Fi"},{href:"https://liberapay.com/phalcode",label:"Liberapay"},{href:"https://www.paypal.me/phalcode",label:"PayPal"}]},{title:"Legals",items:[{label:"License",href:"/docs/license-contribute"},{label:"Legal Notice",href:"https://phalco.de/legal"},{label:"Privacy Policy",href:"https://phalco.de/privacy"},{label:"Terms of Service",href:"https://phalco.de/tos"}]}],copyright:'Copyright \xa9 2024 Phalcode - All Rights Reserved',style:"light"},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["bash","json"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},zoom:{selector:".zoomable,img:not(nav img):not(footer img):not(.nozoom):not([alt~='ko-fi']):not([alt~='GameVault'])",config:{background:{light:"#e2e1ef",dark:"#171528"}}},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,future:{experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},6920:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t r})},2666:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3804:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r =0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},4814:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;to});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n{"use strict";n.d(t,{p1:()=>j,y$:()=>ne});var r,o,a,i,s,l,c,u=n(5271),d=n(4814),p=Object.create,f=Object.defineProperty,g=Object.defineProperties,m=Object.getOwnPropertyDescriptor,b=Object.getOwnPropertyDescriptors,h=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,x=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))_.call(t,n)&&x(e,n,t[n]);if(y)for(var n of y(t))w.call(t,n)&&x(e,n,t[n]);return e},k=(e,t)=>g(e,b(t)),E=(e,t)=>{var n={};for(var r in e)_.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&y)for(var r of y(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},O=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=x.value.length,x=x.next){var k=x.value;if(t.length>e.length)return;if(!(k instanceof o)){var E,O=1;if(y){if(!(E=a(w,S,e,h))||E.index>=e.length)break;var j=E.index,P=E.index+E[0].length,C=S;for(C+=x.value.length;j>=C;)C+=(x=x.next).value.length;if(S=C-=x.value.length,x.value instanceof o)continue;for(var T=x;T!==t.tail&&(C d.reach&&(d.reach=L);var R=x.prev;if(A&&(R=l(t,R,A),S+=A.length),c(t,R,O),x=l(t,R,new o(p,b?r.tokenize(I,b):I,v,I)),N&&l(t,x,N),O>1){var D={cause:p+","+g,reach:L};i(e,t,n,x.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o
"+a.content+""+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return o||(0,r[h(r)[0]])((o={exports:{}}).exports,o),o.exports}),j=((e,t,n)=>(n=null!=e?p(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of h(t))_.call(e,o)||o===n||f(e,o,{get:()=>t[o],enumerable:!(r=m(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:f(n,"default",{value:e,enumerable:!0}),e)))(O());j.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},j.languages.markup.tag.inside["attr-value"].inside.entity=j.languages.markup.entity,j.languages.markup.doctype.inside["internal-subset"].inside=j.languages.markup,j.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(j.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:j.languages[t]},n.cdata=/^$/i,{"included-cdata":{pattern://i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:j.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},j.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(j.languages.markup.tag,"addAttribute",{value:function(e,t){j.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:j.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),j.languages.html=j.languages.markup,j.languages.mathml=j.languages.markup,j.languages.svg=j.languages.markup,j.languages.xml=j.languages.extend("markup",{}),j.languages.ssml=j.languages.xml,j.languages.atom=j.languages.xml,j.languages.rss=j.languages.xml,a=j,i={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},l="(?:[^\\\\-]|"+(s=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",l=RegExp(l+"-"+l),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:l,inside:{escape:s,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":i,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:s}},"special-escape":i,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:s,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},j.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},j.languages.javascript=j.languages.extend("clike",{"class-name":[j.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),j.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,j.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:j.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:j.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:j.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:j.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:j.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),j.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:j.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),j.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),j.languages.markup&&(j.languages.markup.tag.addInlined("script","javascript"),j.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),j.languages.js=j.languages.javascript,j.languages.actionscript=j.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<|>>?>?|[!=]=?)=?|[~?@]/}),j.languages.actionscript["class-name"].alias="function",delete j.languages.actionscript.parameter,delete j.languages.actionscript["literal-property"],j.languages.markup&&j.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:j.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(j),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s |\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(j),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-] )(?:[ \t]*(?:(?![#:]) |: ))*/.source.replace(/ /g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s< >[ \t]+)?)(?:< >)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/< >/g,(function(){return r})).replace(/< >/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s< >[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/< >/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:< >[ \t]+)?)< >(?=\s*:\s)/.source.replace(/< >/g,(function(){return r})).replace(/< >/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(j),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/ /g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_) |_(?:(?!_) )+_)+__\b|\*\*(?:(?!\*) |\*(?:(?!\*) )+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_) |__(?:(?!_) )+__)+_\b|\*(?:(?!\*) |\*\*(?:(?!\*) )+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~) )+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]) )+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]) )+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n ",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(j),j.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:j.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},j.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n ?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a =d.length)return;var i,l,p,f,g,m,b,h=n[a];"string"==typeof h||"string"==typeof h.content?(i=d[c],-1!==(b=(m="string"==typeof h?h:h.content).indexOf(i))&&(++c,l=m.substring(0,b),g=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(g,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,g),f=m.substring(b+i.length),g=[],l&&g.push(l),g.push(p),f&&(t(m=[f]),g.push.apply(g,m)),"string"==typeof h?(n.splice.apply(n,[a,1].concat(g)),a+=g.length-1):h.content=g)):(b=h.content,Array.isArray(b)?t(b):t([b]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r ]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(j),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?: \s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/ /g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(j),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(j),j.languages.n4js=j.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),j.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),j.languages.n4jsd=j.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/ /g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?: (?:\s*,\s*(?:\*\s*as\s+ |\{[^{}]*\}))?|\*\s*as\s+ |\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+ )?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#? /.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r *\.{3}(?:[^{}]| )*\})/.source;function a(e,t){return e=e.replace(/ /g,(function(){return n})).replace(//g,(function(){return r})).replace(/ /g,(function(){return o})),RegExp(e,t)}function i(t){for(var n=[],r=0;r "!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0 +(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+| ))?| ))* *\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/= /.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(j),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(j),j.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},j.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=j.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(j),j.languages.c=j.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),j.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),j.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},j.languages.c.string],char:j.languages.c.char,comment:j.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:j.languages.c}}}}),j.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete j.languages.c.boolean,j.languages.objectivec=j.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete j.languages.objectivec["class-name"],j.languages.objc=j.languages.objectivec,j.languages.reason=j.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),j.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete j.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)| )*\*\//.source,n=0;n<2;n++)t=t.replace(/ /g,(function(){return t}));t=t.replace(/ /g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(j),j.languages.go=j.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),j.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete j.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?! )\w+(?:\s*\.\s*\w+)*\b/.source.replace(/ /g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?! )\w+/.source.replace(/ /g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/ (?:\s*:\s* )?|:\s* /.source.replace(/ /g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(j),j.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},j.languages.python["string-interpolation"].inside.interpolation.inside.rest=j.languages.python,j.languages.py=j.languages.python,j.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},j.languages.webmanifest=j.languages.json;((e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>P,duotoneDark:()=>C,duotoneLight:()=>T,github:()=>I,gruvboxMaterialDark:()=>q,gruvboxMaterialLight:()=>G,jettwaveDark:()=>Q,jettwaveLight:()=>V,nightOwl:()=>A,nightOwlLight:()=>N,oceanicNext:()=>D,okaidia:()=>F,oneDark:()=>Z,oneLight:()=>W,palenight:()=>M,shadesOfPurple:()=>z,synthwave84:()=>B,ultramin:()=>$,vsDark:()=>U,vsLight:()=>H});var P={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},C={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},T={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},I={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},A={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},N={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},L="#c5a5c5",R="#8dc891",D={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:L}},{types:["attr-value"],style:{color:R}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:R}},{types:["punctuation"],style:{color:R}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:L}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},F={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},M={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},z={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},$={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},U={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},H={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},Q={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},Z={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},q={plain:{color:"#ebdbb2",backgroundColor:"#292828"},styles:[{types:["imports","class-name","maybe-class-name","constant","doctype","builtin","function"],style:{color:"#d8a657"}},{types:["property-access"],style:{color:"#7daea3"}},{types:["tag"],style:{color:"#e78a4e"}},{types:["attr-name","char","url","regex"],style:{color:"#a9b665"}},{types:["attr-value","string"],style:{color:"#89b482"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#ea6962"}},{types:["entity","number","symbol"],style:{color:"#d3869b"}}]},G={plain:{color:"#654735",backgroundColor:"#f9f5d7"},styles:[{types:["delimiter","boolean","keyword","selector","important","atrule","property","variable","deleted"],style:{color:"#af2528"}},{types:["imports","class-name","maybe-class-name","constant","doctype","builtin"],style:{color:"#b4730e"}},{types:["string","attr-value"],style:{color:"#477a5b"}},{types:["property-access"],style:{color:"#266b79"}},{types:["function","attr-name","char","url"],style:{color:"#72761e"}},{types:["tag"],style:{color:"#b94c07"}},{types:["comment","prolog","cdata","operator","inserted"],style:{color:"#a89984"}},{types:["entity","number","symbol"],style:{color:"#924f79"}}]},Y=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=S(S({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=k(S({},n),{backgroundColor:void 0}),r},K=/\r\n|\r|\n/,X=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},J=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},ee=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++) 0?c:["plain"],e=u):(c=J(c,u.type),u.alias&&(c=J(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(K),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t {const a=t.toLowerCase(),i=((e,t)=>{const[n,r]=(0,u.useState)(Y(t,e)),o=(0,u.useRef)(),a=(0,u.useRef)();return(0,u.useEffect)((()=>{t===o.current&&e===a.current||(o.current=t,a.current=e,r(Y(t,e)))}),[e,t]),n})(a,r),s=(e=>(0,u.useCallback)((t=>{var n=t,{className:r,style:o,line:a}=n,i=E(n,["className","style","line"]);const s=k(S({},i),{className:(0,d.Z)("token-line",r)});return"object"==typeof e&&"plain"in e&&(s.style=e.plain),"object"==typeof o&&(s.style=S(S({},s.style||{}),o)),s}),[e]))(i),l=(e=>{const t=(0,u.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,u.useCallback)((e=>{var n=e,{token:r,className:o,style:a}=n,i=E(n,["token","className","style"]);const s=k(S({},i),{className:(0,d.Z)("token",...r.types,o),children:r.content,style:t(r)});return null!=a&&(s.style=S(S({},s.style||{}),a)),s}),[t])})(i),c=(({prism:e,code:t,grammar:n,language:r})=>{const o=(0,u.useRef)(e);return(0,u.useMemo)((()=>{if(null==n)return ee([t]);const e={code:t,grammar:n,language:r,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),ee(e.tokens)}),[t,n,r])})({prism:o,language:a,code:n,grammar:o.languages[a]});return e({tokens:c,className:`prism-code language-${a}`,style:null!=i?i.root:{},getLineProps:s,getTokenProps:l})},ne=e=>(0,u.createElement)(te,k(S({},e),{prism:e.prism||j,theme:e.theme||U,code:e.code,language:e.language}))},8624:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},5862:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>L,__assign:()=>a,__asyncDelegator:()=>E,__asyncGenerator:()=>k,__asyncValues:()=>O,__await:()=>S,__awaiter:()=>g,__classPrivateFieldGet:()=>I,__classPrivateFieldIn:()=>N,__classPrivateFieldSet:()=>A,__createBinding:()=>b,__decorate:()=>s,__disposeResources:()=>D,__esDecorate:()=>c,__exportStar:()=>h,__extends:()=>o,__generator:()=>m,__importDefault:()=>T,__importStar:()=>C,__makeTemplateObject:()=>j,__metadata:()=>f,__param:()=>l,__propKey:()=>d,__read:()=>v,__rest:()=>i,__runInitializers:()=>u,__setFunctionName:()=>p,__spread:()=>_,__spreadArray:()=>x,__spreadArrays:()=>w,__values:()=>y,default:()=>F});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n
=0;s--)(o=e[s])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function l(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),p=!1,f=n.length-1;f>=0;f--){var g={};for(var m in r)g[m]="access"===m?{}:r[m];for(var m in r.access)g.access[m]=r.access[m];g.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var b=(0,n[f])("accessor"===l?{get:d.get,set:d.set}:d[c],g);if("accessor"===l){if(void 0===b)continue;if(null===b||"object"!=typeof b)throw new TypeError("Object expected");(s=i(b.get))&&(d.get=s),(s=i(b.set))&&(d.set=s),(s=i(b.init))&&o.unshift(s)}else(s=i(b))&&("field"===l?o.unshift(s):d[c]=s)}u&&Object.defineProperty(u,r.name,d),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o 0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1] =e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(s){o={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function _(){for(var e=[],t=0;t 1||s(e,t)}))},t&&(r[e]=t(r[e])))}function s(e,t){try{(n=o[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,c):u(a[0][2],n)}catch(r){u(a[0][3],r)}var n}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}}function E(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:o?o(t):t}:o}}function O(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=y(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function j(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var P=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function C(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&b(t,e,n);return P(t,e),t}function T(e){return e&&e.__esModule?e:{default:e}}function I(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function A(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function N(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function L(e,t,n){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var r,o;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],n&&(o=r)}if("function"!=typeof r)throw new TypeError("Object not disposable.");o&&(r=function(){try{o.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var R="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function D(e){function t(t){e.error=e.hasError?new R(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}return function n(){for(;e.stack.length;){var r=e.stack.pop();try{var o=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(o).then(n,(function(e){return t(e),n()}))}catch(a){t(a)}}if(e.hasError)throw e.error}()}const F={__extends:o,__assign:a,__rest:i,__decorate:s,__param:l,__metadata:f,__awaiter:g,__generator:m,__createBinding:b,__exportStar:h,__values:y,__read:v,__spread:_,__spreadArrays:w,__spreadArray:x,__await:S,__asyncGenerator:k,__asyncDelegator:E,__asyncValues:O,__makeTemplateObject:j,__importStar:C,__importDefault:T,__classPrivateFieldGet:I,__classPrivateFieldSet:A,__classPrivateFieldIn:N,__addDisposableResource:L,__disposeResources:D}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-deb":{"__comp":"a6aa9e1f","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"},{"content":"fe2b2ad8"},{"content":"e70842e4"},{"content":"47aca6da"},{"content":"9147d3af"},{"content":"3fc3119e"},{"content":"d9d4e1f1"},{"content":"2024b8b1"},{"content":"fb0a08ce"},{"content":"8795eea9"}],"__props":"c15d9823"},"/blog/2023/07/01/-30b":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"a1f57275"},"/blog/2023/07/08/-d10":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"7424d9c3"},"/blog/2023/07/09/-2c2":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"b7026fb3"},"/blog/2023/07/13/-6e5":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"0bfa7fcc"},"/blog/2023/07/15/-b20":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"9748c478"},"/blog/2023/07/19/-8a6":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"c332f8df"},"/blog/2023/07/20/-9b6":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"b493ea72"},"/blog/2023/07/24/-4f4":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"a1216fa4"},"/blog/2023/07/29/-44c":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"e7aa45d5"},"/blog/2023/11/20/-3f2":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"55dfe132"},"/blog/2023/12/09/-d2c":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"0b705c82"},"/blog/2024/03/28/-60b":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"e0c5798e"},"/blog/2024/04/01/2024-04-01/-59c":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"4a6974fe"},"/blog/2024/04/14/-e89":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"cd59c184"},"/blog/2024/05/07/-2dc":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"fbaf179c"},"/blog/2024/10/20/-4e9":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"9019cc36"},"/blog/archive-182":{"__comp":"9e4087bc","__context":{"plugin":"36994c47"},"__props":"f81c1134"},"/blog/authors-0b7":{"__comp":"621db11d","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","__props":"ef8b811a"},"/blog/page/2-fd3":{"__comp":"a6aa9e1f","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"},{"content":"89db6d1d"},{"content":"2e008a3a"},{"content":"7b99d5ba"},{"content":"ba3af7ad"},{"content":"7489ed02"}],"__props":"8ea09047"},"/blog/tags-287":{"__comp":"01a85c17","__context":{"plugin":"36994c47"},"sidebar":"814f3328","__props":"3a2db09e"},"/blog/tags/age-restrictions-8da":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"416eca3f"},"/blog/tags/ai-generated-names-de1":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"eda4f68b"},"/blog/tags/alternative-0cb":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"5ac1a9ec"},"/blog/tags/analytics-105":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"66e9ef90"},"/blog/tags/announcement-3ab":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"9147d3af"},{"content":"ba3af7ad"}],"__props":"9d86e7fa"},"/blog/tags/api-d97":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"},{"content":"7489ed02"}],"__props":"f525eb8a"},"/blog/tags/app-f50":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"10d38074"},"/blog/tags/app-name-migration-b3d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"6535206c"},"/blog/tags/app-optimization-4b7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"b2c9ad8a"},"/blog/tags/april-fools-45b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"47aca6da"}],"__props":"915cb6f7"},"/blog/tags/backend-bc5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"5c99339f"},"/blog/tags/backend-application-migration-ea3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"4fb3dfba"},"/blog/tags/beta-testing-8e3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"3fc3119e"}],"__props":"f6f174b1"},"/blog/tags/blackmail-2a4":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"7864c493"},"/blog/tags/box-representation-400":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"24c2f136"},"/blog/tags/bugs-ff5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"3f6275a8"},"/blog/tags/celebration-of-achievements-f97":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"8e064018"},"/blog/tags/client-application-update-45e":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"077db3c5"},"/blog/tags/client-update-d5b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"36bc9c65"},"/blog/tags/cloud-based-game-platforms-a94":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"87cefd36"},"/blog/tags/code-access-1ef":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"0a27b0d0"},"/blog/tags/coding-chronicle-d18":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"d527dda4"},"/blog/tags/collaboration-f74":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"bdf26d57"},"/blog/tags/community-e39":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"},{"content":"9147d3af"},{"content":"2024b8b1"},{"content":"ba3af7ad"}],"__props":"dc8e8e39"},"/blog/tags/community-driven-63b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"71f025ea"},"/blog/tags/community-feedback-3ee":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"3fc3119e"},{"content":"89db6d1d"}],"__props":"3fc2248c"},"/blog/tags/community-management-93f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"751a244a"},"/blog/tags/continued-support-afc":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"77a8abe0"},"/blog/tags/control-04d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"2a693baa"},"/blog/tags/council-member-a6a":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"fee02ac9"},"/blog/tags/creepy-behavior-090":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"e78c2f6e"},"/blog/tags/database-ff5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"a6fed517"},"/blog/tags/decision-making-532":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"63511f3c"},"/blog/tags/developers-487":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"8167ef7e"},"/blog/tags/development-b27":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"9147d3af"},{"content":"2024b8b1"}],"__props":"fcad5cc1"},"/blog/tags/development-milestones-1c9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"0ad562e6"},"/blog/tags/discord-6df":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"3fc3119e"},{"content":"2024b8b1"}],"__props":"e3409e91"},"/blog/tags/discord-channel-b2d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"},{"content":"0bd541ed"}],"__props":"18747338"},"/blog/tags/discord-community-growth-136":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"e4878929"},"/blog/tags/discord-server-e4d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"e935068c"},"/blog/tags/discord-server-promotion-f55":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"2f44e9f7"},"/blog/tags/documentation-migration-405":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"6e64f266"},"/blog/tags/domain-acquisition-e1a":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"065dfc11"},"/blog/tags/drm-free-c7e":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"f94e70f3"},"/blog/tags/drm-free-games-6cf":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"678c8d60"},"/blog/tags/early-access-ed5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"3fc3119e"}],"__props":"d82a1228"},"/blog/tags/easter-egg-7c7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"cc616304"},"/blog/tags/engagement-b3b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"01fcf7cb"},"/blog/tags/exclusive-preview-0fe":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"3fc3119e"}],"__props":"4efd7f8f"},"/blog/tags/family-friendly-282":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"6bbbce94"},"/blog/tags/feature-requests-61d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"80404bfe"},"/blog/tags/features-3d5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"},{"content":"e70842e4"},{"content":"2024b8b1"}],"__props":"d5823966"},"/blog/tags/feedback-a81":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"2024b8b1"},{"content":"fb0a08ce"},{"content":"ba3af7ad"}],"__props":"f58fbef8"},"/blog/tags/file-server-f0b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"a3fd4b44"},"/blog/tags/financial-assistance-e64":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"92440753"},"/blog/tags/future-development-db0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"8f8e2e78"},"/blog/tags/future-features-bed":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"e623129a"},"/blog/tags/game-a29":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"1dd5d307"},"/blog/tags/game-development-97c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"99d3d5ac"},"/blog/tags/game-hub-6c3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"4ff7c2f7"},"/blog/tags/game-shelf-566":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"5fa82f91"},"/blog/tags/game-stash-728":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"51fa4cf1"},"/blog/tags/game-vault-39f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"},{"content":"fe2b2ad8"},{"content":"e70842e4"},{"content":"9147d3af"},{"content":"3fc3119e"},{"content":"2024b8b1"},{"content":"89db6d1d"},{"content":"ba3af7ad"},{"content":"7489ed02"}],"__props":"9fafd272"},"/blog/tags/game-vault-app-bd6":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"8ff99662"},"/blog/tags/game-vault-domain-a5b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"8a3c85db"},"/blog/tags/game-vault-journey-52d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"7754063d"},"/blog/tags/game-vault-milestone-030":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"df8deb2d"},"/blog/tags/gaming-2b9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"9147d3af"},{"content":"3fc3119e"},{"content":"7489ed02"}],"__props":"9b1663d8"},"/blog/tags/gaming-community-73c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"daddf69a"},"/blog/tags/gaming-experience-f8c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"7c4a7780"},"/blog/tags/gaming-platform-12f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"7a0110f5"},"/blog/tags/gaming-servers-e66":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"3fc3119e"}],"__props":"9b95b357"},"/blog/tags/git-hub-590":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"886fdd87"},"/blog/tags/git-hub-issue-8a0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"77f7e459"},"/blog/tags/gratitude-1d7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"03919031"},"/blog/tags/harassment-89d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"251cbb95"},"/blog/tags/harbor-a9f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"524a34e7"},"/blog/tags/health-monitoring-d88":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"63b46e50"},"/blog/tags/hybrid-model-038":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"2296bbef"},"/blog/tags/igdb-6ff":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"9d5a95a9"},"/blog/tags/improvement-0af":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"7b99d5ba"}],"__props":"013bccfd"},"/blog/tags/inclusivity-7a0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"f677311a"},"/blog/tags/installation-pipeline-94b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"5a8f8fa9"},"/blog/tags/kanban-board-372":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"5bbd8cf3"},"/blog/tags/keyhole-representation-ae7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"c71ef62c"},"/blog/tags/lemmy-community-a2d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"26ca8ce1"},"/blog/tags/lemmy-community-launch-9dd":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"063ffaec"},"/blog/tags/lemmy-forum-7bd":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"3ac72a53"},"/blog/tags/logo-concept-discussion-7e7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"bb12dd4d"},"/blog/tags/logo-deciphering-dc4":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"3b659bf0"},"/blog/tags/love-for-game-vault-2f9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"e07621e3"},"/blog/tags/market-analysis-c1c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"04a3aba4"},"/blog/tags/metadata-2c9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"},{"content":"7489ed02"}],"__props":"46e7f252"},"/blog/tags/metadata-framework-bc5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"8a3716b4"},"/blog/tags/microsoft-store-cc8":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"3fc3119e"}],"__props":"5a2f6c5d"},"/blog/tags/microsoft-store-publication-a3d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"591d17b8"},"/blog/tags/migration-finalization-138":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"e5c4b825"},"/blog/tags/motivation-8c7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"ca2d5c98"},"/blog/tags/multi-user-authentication-3a5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"d9341347"},"/blog/tags/name-migration-progress-396":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"e98ed1e4"},"/blog/tags/negative-narratives-ef7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"2608b85a"},"/blog/tags/new-logo-3d9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"3f99d67c"},"/blog/tags/new-name-28c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"d5dcebd7"},"/blog/tags/new-name-announcement-7b6":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"8852925a"},"/blog/tags/notes-f1b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"3bdf5af6"},"/blog/tags/november-update-a61":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"7486ddfc"},"/blog/tags/official-installations-733":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"c9618c72"},"/blog/tags/open-source-6be":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"b2ade0e8"},"/blog/tags/parental-control-65b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"d53cd084"},"/blog/tags/partnership-0de":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"204759e4"},"/blog/tags/partnerships-588":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"e46b1034"},"/blog/tags/platform-0bc":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"2024b8b1"}],"__props":"4e01c0f4"},"/blog/tags/platform-values-376":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"9e75d8bf"},"/blog/tags/plugin-system-4f9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"bc0aa6af"},"/blog/tags/poll-eda":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"6ff2a8aa"},"/blog/tags/poll-results-2a9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"500e67e3"},"/blog/tags/polls-829":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"8b8fd5aa"},"/blog/tags/public-f5f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"daf02673"},"/blog/tags/racist-2bb":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"979ccdb6"},"/blog/tags/rawg-5ed":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"fb0e7a2f"},"/blog/tags/rawg-api-751":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"0c6a4732"},"/blog/tags/reddit-forum-61e":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7489ed02"}],"__props":"0d3164f5"},"/blog/tags/release-15f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"c9cac9d9"},"/blog/tags/renaming-app-d2c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"6a40fd04"},"/blog/tags/revenue-generation-68c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"e0a15777"},"/blog/tags/roadmap-e17":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"}],"__props":"92fb1dcd"},"/blog/tags/safe-environment-620":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"1334883d"},"/blog/tags/self-hosted-19e":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"},{"content":"7489ed02"}],"__props":"5db30e8c"},"/blog/tags/self-hosted-newsletter-b53":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"573c7c88"},"/blog/tags/selfhosted-podcast-8d7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"c8fbe42c"},"/blog/tags/server-update-7ee":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"805ec11d"},"/blog/tags/sharing-blog-posts-2e3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"f2a7e769"},"/blog/tags/simplifying-game-installation-0a0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"1ff343c8"},"/blog/tags/software-ed0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"9147d3af"}],"__props":"a7d982d4"},"/blog/tags/software-development-f78":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"e9e1de17"},"/blog/tags/software-licensing-6a0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"db0b0363"},"/blog/tags/software-updates-742":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"4f991444"},"/blog/tags/solution-a71":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"9046e000"},"/blog/tags/source-available-501":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"},{"content":"7489ed02"}],"__props":"cc0b9cf0"},"/blog/tags/source-available-software-42f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"23a0eab7"},"/blog/tags/spam-99a":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"8577c450"},"/blog/tags/special-thanks-721":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"c8472403"},"/blog/tags/speculation-691":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"5baa483a"},"/blog/tags/spreading-the-word-9a5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"},{"content":"8795eea9"}],"__props":"113d89da"},"/blog/tags/startup-387":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"9147d3af"}],"__props":"c7bbcbc7"},"/blog/tags/steam-5cb":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"ab6782ba"},"/blog/tags/subreddit-migration-bf0":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"19e4f252"},"/blog/tags/subscription-088":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"00dfabf5"},"/blog/tags/subscription-model-7e6":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"9147d3af"}],"__props":"2aa0a660"},"/blog/tags/subscription-to-updates-role-97f":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"534e7ef5"},"/blog/tags/success-cc5":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"dd9b1d9d"},"/blog/tags/support-a33":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"009c376a"},"/blog/tags/support-request-99a":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"ff51e3f1"},"/blog/tags/surge-of-new-users-4ba":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"8795eea9"}],"__props":"aeb57253"},"/blog/tags/sustainability-5a8":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"defc3e62"},"/blog/tags/tech-progress-1f3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"20661643"},"/blog/tags/testing-ad7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"0bd541ed"}],"__props":"82c81335"},"/blog/tags/theme-6c7":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7ef69c2b"}],"__props":"73ad9a8e"},"/blog/tags/threats-3f9":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"4534f50b"},"/blog/tags/transition-process-a0e":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"89db6d1d"}],"__props":"7558b7a2"},"/blog/tags/transparency-7b3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"00fcf151"},"/blog/tags/trolls-22a":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7b99d5ba"}],"__props":"41e301a0"},"/blog/tags/twitch-tv-c17":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"99f2b7e6"},"/blog/tags/ui-redesign-1e3":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"d9d4e1f1"}],"__props":"bcc2422e"},"/blog/tags/ui-update-0da":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"3fc3119e"}],"__props":"cee5390f"},"/blog/tags/upcoming-update-f39":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fb0a08ce"}],"__props":"3af271b3"},"/blog/tags/update-fa1":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"0766ce7b"},"/blog/tags/updates-125":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"71f72e4c"},"/blog/tags/user-engagement-51e":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2e008a3a"}],"__props":"d6138fd2"},"/blog/tags/user-participation-15b":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"ba3af7ad"}],"__props":"357ebdd0"},"/blog/tags/video-games-b8c":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"e70842e4"}],"__props":"7576ca6a"},"/blog/tags/videogame-f65":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"fe2b2ad8"}],"__props":"a67f6c3e"},"/blog/tags/voting-f23":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"2024b8b1"},{"content":"ba3af7ad"}],"__props":"cd781ce1"},"/docs-8eb":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/docs-824":{"__comp":"a7bd4aaa","__props":"0058b4c6"},"/docs-003":{"__comp":"a94703ab"},"/docs/advanced-usage/early-access-program-1a3":{"__comp":"17896441","content":"264f4708"},"/docs/advanced-usage/fail2ban-gamevault-guide-c21":{"__comp":"17896441","content":"ee98c124"},"/docs/advanced-usage/linux-client-832":{"__comp":"17896441","content":"dcb9a9e8"},"/docs/advanced-usage/rest-api-68a":{"__comp":"17896441","content":"c89c7974"},"/docs/advanced-usage/steamdeck-77f":{"__comp":"17896441","content":"e0da75fc"},"/docs/client-docs/data-9cf":{"__comp":"17896441","content":"51e7bf36"},"/docs/client-docs/gui-04f":{"__comp":"17896441","content":"a1072f2a"},"/docs/client-docs/how-to-use-4c0":{"__comp":"17896441","content":"435302bb"},"/docs/client-docs/setup-ff6":{"__comp":"17896441","content":"b8ecf3c5"},"/docs/client-docs/themes-804":{"__comp":"17896441","content":"f8aea940"},"/docs/client-docs/updating-client-9cd":{"__comp":"17896441","content":"e9e0f988"},"/docs/gamevault-plus/client-apis-64c":{"__comp":"17896441","content":"9404f843"},"/docs/gamevault-plus/client-setup-51c":{"__comp":"17896441","content":"c9d2adb2"},"/docs/gamevault-plus/introduction-4dc":{"__comp":"17896441","content":"ec46a009"},"/docs/gamevault-plus/themes-373":{"__comp":"17896441","content":"f5b06269"},"/docs/intro-423":{"__comp":"17896441","content":"0e384e19"},"/docs/license-contribute-007":{"__comp":"17896441","content":"ba57e113"},"/docs/server-docs/adding-games-e2d":{"__comp":"17896441","content":"14b6aafb"},"/docs/server-docs/backup-and-restore-dbe":{"__comp":"17896441","content":"4d393b3e"},"/docs/server-docs/configuration-d69":{"__comp":"17896441","content":"b28c3188"},"/docs/server-docs/game-types-37b":{"__comp":"17896441","content":"5e5c84c3"},"/docs/server-docs/indexing-dc2":{"__comp":"17896441","content":"b1d7f5b9"},"/docs/server-docs/media-309":{"__comp":"17896441","content":"007d2baa"},"/docs/server-docs/metadata-enrichment/metadata-72d":{"__comp":"17896441","content":"0748c3bc"},"/docs/server-docs/metadata-enrichment/provider-igdb-29e":{"__comp":"17896441","content":"193fe191"},"/docs/server-docs/parental-control-450":{"__comp":"17896441","content":"8ba18f4f"},"/docs/server-docs/plugins-1b3":{"__comp":"17896441","content":"18d9fd7d"},"/docs/server-docs/server-news-bc7":{"__comp":"17896441","content":"438c7fa2"},"/docs/server-docs/setup/-9a4":{"__comp":"17896441","content":"f4d4319b"},"/docs/server-docs/setup/caprover-0fd":{"__comp":"17896441","content":"b4068411"},"/docs/server-docs/setup/docker-compose-d03":{"__comp":"17896441","content":"8c4108df"},"/docs/server-docs/setup/native-472":{"__comp":"17896441","content":"cddec16f"},"/docs/server-docs/setup/synology-container-manager-c21":{"__comp":"17896441","content":"1e0a1681"},"/docs/server-docs/setup/truenas-scale-97e":{"__comp":"17896441","content":"1630eae8"},"/docs/server-docs/setup/unraid-ec0":{"__comp":"17896441","content":"80292675"},"/docs/server-docs/structure-ff2":{"__comp":"17896441","content":"61be0f73"},"/docs/server-docs/updating-games-0d0":{"__comp":"17896441","content":"4a631206"},"/docs/server-docs/user-management-17a":{"__comp":"17896441","content":"e6a59d41"},"/docs/server-docs/websockets-c8c":{"__comp":"17896441","content":"5046667d"},"/docs/troubleshooting-662":{"__comp":"17896441","content":"9d9f8394"},"/-2e1":{"__comp":"c4f5d8e4","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9617,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.dc29ecc1.js b/assets/js/main.dc29ecc1.js new file mode 100644 index 000000000..f59156e1e --- /dev/null +++ b/assets/js/main.dc29ecc1.js @@ -0,0 +1,2 @@ +/*! For license information please see main.dc29ecc1.js.LICENSE.txt */ +(self.webpackChunkgamevault_docs=self.webpackChunkgamevault_docs||[]).push([[8792],{8104:(e,t,n)=>{var r={"./prism-bash":8520,"./prism-json":8228};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8104},1151:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(758);var r=n(3485),o=n.n(r),a=n(4054);const i={"0058b4c6":[()=>n.e(849).then(n.t.bind(n,6164,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",6164],"007d2baa":[()=>n.e(5112).then(n.bind(n,3434)),"@site/docs/server-docs/media.md",3434],"009c376a":[()=>n.e(1122).then(n.t.bind(n,2516,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-support-4e8.json",2516],"00dfabf5":[()=>n.e(2079).then(n.t.bind(n,4632,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subscription-223.json",4632],"00fcf151":[()=>n.e(315).then(n.t.bind(n,9771,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-transparency-2c4.json",9771],"013bccfd":[()=>n.e(7145).then(n.t.bind(n,8928,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-improvement-e54.json",8928],"01a85c17":[()=>Promise.all([n.e(1869),n.e(8209)]).then(n.bind(n,5735)),"@theme/BlogTagsListPage",5735],"01fcf7cb":[()=>n.e(9809).then(n.t.bind(n,9887,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-engagement-408.json",9887],"03919031":[()=>n.e(9161).then(n.t.bind(n,1854,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gratitude-944.json",1854],"04a3aba4":[()=>n.e(753).then(n.t.bind(n,8150,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-market-analysis-e77.json",8150],"063ffaec":[()=>n.e(5173).then(n.t.bind(n,1940,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lemmy-community-launch-0dd.json",1940],"065dfc11":[()=>n.e(4469).then(n.t.bind(n,4820,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-domain-acquisition-75b.json",4820],"0748c3bc":[()=>n.e(5723).then(n.bind(n,6786)),"@site/docs/server-docs/metadata-enrichment/metadata.md",6786],"0766ce7b":[()=>n.e(5455).then(n.t.bind(n,6563,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-update-1f1.json",6563],"077db3c5":[()=>n.e(1028).then(n.t.bind(n,4819,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-client-application-update-423.json",4819],"0a27b0d0":[()=>n.e(3537).then(n.t.bind(n,6529,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-code-access-151.json",6529],"0ad562e6":[()=>n.e(3362).then(n.t.bind(n,2079,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-development-milestones-2fd.json",2079],"0b705c82":[()=>n.e(9030).then(n.bind(n,8410)),"@site/blog/2023-12-09.md",8410],"0bd541ed":[()=>n.e(2230).then(n.bind(n,6263)),"@site/blog/2023-07-19.md?truncated=true",6263],"0bfa7fcc":[()=>n.e(1199).then(n.bind(n,7223)),"@site/blog/2023-07-13.md",7223],"0c6a4732":[()=>n.e(1415).then(n.t.bind(n,1784,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-rawg-api-f4d.json",1784],"0d3164f5":[()=>n.e(2278).then(n.t.bind(n,9758,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-reddit-forum-6ca.json",9758],"0e384e19":[()=>n.e(3976).then(n.bind(n,6187)),"@site/docs/intro.md",6187],"10d38074":[()=>n.e(5662).then(n.t.bind(n,7465,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-app-0c9.json",7465],"113d89da":[()=>n.e(1340).then(n.t.bind(n,6855,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-spreading-the-word-793.json",6855],"1334883d":[()=>n.e(6039).then(n.t.bind(n,3850,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-safe-environment-fa4.json",3850],"14b6aafb":[()=>n.e(3290).then(n.bind(n,7544)),"@site/docs/server-docs/adding-games.md",7544],"1630eae8":[()=>n.e(2858).then(n.bind(n,3731)),"@site/docs/server-docs/setup/truenas-scale.md",3731],17896441:[()=>Promise.all([n.e(1869),n.e(349),n.e(8401)]).then(n.bind(n,87)),"@theme/DocItem",87],18747338:[()=>n.e(9470).then(n.t.bind(n,4434,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-channel-e8c.json",4434],"18d9fd7d":[()=>n.e(3158).then(n.bind(n,884)),"@site/docs/server-docs/plugins.md",884],"193fe191":[()=>n.e(2386).then(n.bind(n,4956)),"@site/docs/server-docs/metadata-enrichment/provider-igdb.md",4956],"19e4f252":[()=>n.e(843).then(n.t.bind(n,8227,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subreddit-migration-749.json",8227],"1dd5d307":[()=>n.e(5033).then(n.t.bind(n,8853,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-3e5.json",8853],"1e0a1681":[()=>n.e(8532).then(n.bind(n,1788)),"@site/docs/server-docs/setup/synology-container-manager.md",1788],"1ff343c8":[()=>n.e(4581).then(n.t.bind(n,9385,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-simplifying-game-installation-c9f.json",9385],"2024b8b1":[()=>n.e(9738).then(n.bind(n,9666)),"@site/blog/2023-07-29.md?truncated=true",9666],"204759e4":[()=>n.e(9951).then(n.t.bind(n,5545,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-partnership-7e9.json",5545],20661643:[()=>n.e(6467).then(n.t.bind(n,3557,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-tech-progress-c60.json",3557],"2296bbef":[()=>n.e(7619).then(n.t.bind(n,9323,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hybrid-model-384.json",9323],"23a0eab7":[()=>n.e(7614).then(n.t.bind(n,5697,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-source-available-software-761.json",5697],"24c2f136":[()=>n.e(1718).then(n.t.bind(n,1544,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-box-representation-da0.json",1544],"251cbb95":[()=>n.e(5450).then(n.t.bind(n,1942,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-harassment-11d.json",1942],"2608b85a":[()=>n.e(2691).then(n.t.bind(n,9508,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-negative-narratives-b3f.json",9508],"264f4708":[()=>n.e(7706).then(n.bind(n,5677)),"@site/docs/advanced-usage/early-access-program.md",5677],"26ca8ce1":[()=>n.e(7554).then(n.t.bind(n,1159,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lemmy-community-5b4.json",1159],"2a693baa":[()=>n.e(5810).then(n.t.bind(n,9001,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-control-29f.json",9001],"2aa0a660":[()=>n.e(7e3).then(n.t.bind(n,6143,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subscription-model-e21.json",6143],"2e008a3a":[()=>n.e(4769).then(n.bind(n,2857)),"@site/blog/2023-07-13.md?truncated=true",2857],"2f44e9f7":[()=>n.e(7652).then(n.t.bind(n,3840,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-server-promotion-03a.json",3840],"357ebdd0":[()=>n.e(5289).then(n.t.bind(n,9792,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-user-participation-4a2.json",9792],"36994c47":[()=>n.e(9858).then(n.t.bind(n,5516,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",5516],"36bc9c65":[()=>n.e(14).then(n.t.bind(n,1049,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-client-update-ad5.json",1049],"3a2db09e":[()=>n.e(8121).then(n.t.bind(n,8070,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-df9.json",8070],"3ac72a53":[()=>n.e(4674).then(n.t.bind(n,8832,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-lemmy-forum-09e.json",8832],"3af271b3":[()=>n.e(6030).then(n.t.bind(n,6955,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-upcoming-update-894.json",6955],"3b659bf0":[()=>n.e(3388).then(n.t.bind(n,3724,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-logo-deciphering-a29.json",3724],"3bdf5af6":[()=>n.e(9316).then(n.t.bind(n,5941,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-notes-dea.json",5941],"3f6275a8":[()=>n.e(5759).then(n.t.bind(n,1657,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-bugs-30a.json",1657],"3f99d67c":[()=>n.e(2690).then(n.t.bind(n,5374,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-logo-031.json",5374],"3fc2248c":[()=>n.e(2762).then(n.t.bind(n,293,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-feedback-110.json",293],"3fc3119e":[()=>n.e(3470).then(n.bind(n,1214)),"@site/blog/2023-12-09.md?truncated=true",1214],"416eca3f":[()=>n.e(8130).then(n.t.bind(n,9059,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-age-restrictions-5d3.json",9059],"41e301a0":[()=>n.e(8160).then(n.t.bind(n,9976,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-trolls-732.json",9976],"435302bb":[()=>n.e(2298).then(n.bind(n,7164)),"@site/docs/client-docs/how-to-use.md",7164],"438c7fa2":[()=>n.e(8733).then(n.bind(n,1834)),"@site/docs/server-docs/server-news.md",1834],"4534f50b":[()=>n.e(2206).then(n.t.bind(n,2268,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-threats-86b.json",2268],"46e7f252":[()=>n.e(9724).then(n.t.bind(n,5469,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-metadata-b2d.json",5469],"47aca6da":[()=>n.e(6484).then(n.bind(n,4564)),"@site/blog/2024-04-01/2024-04-01.md?truncated=true",4564],"4a631206":[()=>n.e(6188).then(n.bind(n,8066)),"@site/docs/server-docs/updating-games.md",8066],"4a6974fe":[()=>n.e(6175).then(n.bind(n,5256)),"@site/blog/2024-04-01/2024-04-01.md",5256],"4d393b3e":[()=>n.e(7624).then(n.bind(n,6745)),"@site/docs/server-docs/backup-and-restore.md",6745],"4e01c0f4":[()=>n.e(4308).then(n.t.bind(n,2406,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-platform-b8a.json",2406],"4efd7f8f":[()=>n.e(5877).then(n.t.bind(n,1086,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-exclusive-preview-10f.json",1086],"4f991444":[()=>n.e(3580).then(n.t.bind(n,2155,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-updates-c8d.json",2155],"4fb3dfba":[()=>n.e(8001).then(n.t.bind(n,9420,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-backend-application-migration-545.json",9420],"4ff7c2f7":[()=>n.e(5246).then(n.t.bind(n,4536,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-hub-801.json",4536],"500e67e3":[()=>n.e(3360).then(n.t.bind(n,4641,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-poll-results-c1e.json",4641],"5046667d":[()=>n.e(6395).then(n.bind(n,347)),"@site/docs/server-docs/websockets.md",347],"51e7bf36":[()=>n.e(1334).then(n.bind(n,7458)),"@site/docs/client-docs/data.md",7458],"51fa4cf1":[()=>n.e(9734).then(n.t.bind(n,3525,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-stash-816.json",3525],"524a34e7":[()=>n.e(5138).then(n.t.bind(n,2265,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-harbor-82c.json",2265],"534e7ef5":[()=>n.e(625).then(n.t.bind(n,6287,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-subscription-to-updates-role-792.json",6287],"55dfe132":[()=>n.e(3314).then(n.bind(n,9292)),"@site/blog/2023-11-20.md",9292],"573c7c88":[()=>n.e(3903).then(n.t.bind(n,8626,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-self-hosted-newsletter-6aa.json",8626],"591d17b8":[()=>n.e(4028).then(n.t.bind(n,4669,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-microsoft-store-publication-729.json",4669],"5a2f6c5d":[()=>n.e(811).then(n.t.bind(n,2566,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-microsoft-store-736.json",2566],"5a8f8fa9":[()=>n.e(4983).then(n.t.bind(n,2067,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-installation-pipeline-ebc.json",2067],"5ac1a9ec":[()=>n.e(1267).then(n.t.bind(n,7790,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-alternative-214.json",7790],"5b1700d1":[()=>n.e(7903).then(n.bind(n,9642)),"@site/docs/server-docs/setup/truenas-scale-legacy.md",9642],"5baa483a":[()=>n.e(2888).then(n.t.bind(n,8961,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-speculation-a41.json",8961],"5bbd8cf3":[()=>n.e(894).then(n.t.bind(n,996,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-kanban-board-262.json",996],"5c99339f":[()=>n.e(3294).then(n.t.bind(n,5248,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-backend-c70.json",5248],"5db30e8c":[()=>n.e(1767).then(n.t.bind(n,9613,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-self-hosted-4fa.json",9613],"5e5c84c3":[()=>n.e(6051).then(n.bind(n,2031)),"@site/docs/server-docs/game-types.md",2031],"5e95c892":[()=>n.e(9647).then(n.bind(n,5979)),"@theme/DocsRoot",5979],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5fa82f91":[()=>n.e(4939).then(n.t.bind(n,4194,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-shelf-102.json",4194],"61be0f73":[()=>n.e(3555).then(n.bind(n,3749)),"@site/docs/server-docs/structure.md",3749],"621db11d":[()=>Promise.all([n.e(1869),n.e(3990),n.e(4212)]).then(n.bind(n,2336)),"@theme/Blog/Pages/BlogAuthorsListPage",2336],"63511f3c":[()=>n.e(2671).then(n.t.bind(n,6735,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-decision-making-c62.json",6735],"63b46e50":[()=>n.e(3328).then(n.t.bind(n,4062,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-health-monitoring-c3c.json",4062],"6535206c":[()=>n.e(295).then(n.t.bind(n,7140,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-app-name-migration-54a.json",7140],"66e9ef90":[()=>n.e(791).then(n.t.bind(n,2744,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-analytics-43c.json",2744],"678c8d60":[()=>n.e(9751).then(n.t.bind(n,7364,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-drm-free-games-d6f.json",7364],"6875c492":[()=>Promise.all([n.e(1869),n.e(349),n.e(3990),n.e(4813)]).then(n.bind(n,7711)),"@theme/BlogTagsPostsPage",7711],"6a40fd04":[()=>n.e(6590).then(n.t.bind(n,8993,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-renaming-app-716.json",8993],"6bbbce94":[()=>n.e(9636).then(n.t.bind(n,3127,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-family-friendly-d7c.json",3127],"6e64f266":[()=>n.e(902).then(n.t.bind(n,6508,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-documentation-migration-461.json",6508],"6ff2a8aa":[()=>n.e(1474).then(n.t.bind(n,1624,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-poll-55a.json",1624],"71f025ea":[()=>n.e(2124).then(n.t.bind(n,6381,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-driven-c68.json",6381],"71f72e4c":[()=>n.e(8106).then(n.t.bind(n,4681,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-updates-66c.json",4681],"73ad9a8e":[()=>n.e(3629).then(n.t.bind(n,2533,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-theme-b53.json",2533],"7424d9c3":[()=>n.e(7703).then(n.bind(n,6731)),"@site/blog/2023-07-08.md",6731],"7486ddfc":[()=>n.e(6053).then(n.t.bind(n,460,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-november-update-7a2.json",460],"7489ed02":[()=>n.e(8354).then(n.bind(n,4440)),"@site/blog/2023-07-01.md?truncated=true",4440],"751a244a":[()=>n.e(9514).then(n.t.bind(n,584,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-management-84a.json",584],"7558b7a2":[()=>n.e(7400).then(n.t.bind(n,2016,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-transition-process-04a.json",2016],"7576ca6a":[()=>n.e(135).then(n.t.bind(n,4970,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-video-games-c79.json",4970],"7754063d":[()=>n.e(8341).then(n.t.bind(n,7565,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-journey-706.json",7565],"77a8abe0":[()=>n.e(4404).then(n.t.bind(n,3021,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-continued-support-22f.json",3021],"77f7e459":[()=>n.e(3973).then(n.t.bind(n,9912,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-git-hub-issue-e5d.json",9912],"7864c493":[()=>n.e(7457).then(n.t.bind(n,2565,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-blackmail-b61.json",2565],"7a0110f5":[()=>n.e(7530).then(n.t.bind(n,9714,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-platform-8e2.json",9714],"7b99d5ba":[()=>n.e(5572).then(n.bind(n,2592)),"@site/blog/2023-07-09.md?truncated=true",2592],"7c4a7780":[()=>n.e(6410).then(n.t.bind(n,4965,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-experience-d09.json",4965],"7ef69c2b":[()=>n.e(6755).then(n.bind(n,9988)),"@site/blog/2024-10-20.md?truncated=true",9988],80292675:[()=>n.e(3716).then(n.bind(n,8656)),"@site/docs/server-docs/setup/unraid.md",8656],"80404bfe":[()=>n.e(3134).then(n.t.bind(n,9894,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-feature-requests-f1b.json",9894],"805ec11d":[()=>n.e(4974).then(n.t.bind(n,6913,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-server-update-54e.json",6913],"814f3328":[()=>n.e(7472).then(n.t.bind(n,5513,19)),"~blog/default/blog-post-list-prop-default.json",5513],"8167ef7e":[()=>n.e(6142).then(n.t.bind(n,7988,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-developers-001.json",7988],"82c81335":[()=>n.e(1584).then(n.t.bind(n,8417,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-testing-29d.json",8417],"8577c450":[()=>n.e(3354).then(n.t.bind(n,1944,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-spam-cff.json",1944],"8795eea9":[()=>n.e(3154).then(n.bind(n,791)),"@site/blog/2023-07-20.md?truncated=true",791],"87cefd36":[()=>n.e(7601).then(n.t.bind(n,7498,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-cloud-based-game-platforms-ee3.json",7498],"8852925a":[()=>n.e(8793).then(n.t.bind(n,5033,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-name-announcement-577.json",5033],"886fdd87":[()=>n.e(8896).then(n.t.bind(n,1976,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-git-hub-b4b.json",1976],"89db6d1d":[()=>n.e(925).then(n.bind(n,539)),"@site/blog/2023-07-15.md?truncated=true",539],"8a3716b4":[()=>n.e(3503).then(n.t.bind(n,4453,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-metadata-framework-ab4.json",4453],"8a3c85db":[()=>n.e(8611).then(n.t.bind(n,3658,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-domain-161.json",3658],"8b8fd5aa":[()=>n.e(1172).then(n.t.bind(n,8707,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-polls-463.json",8707],"8ba18f4f":[()=>n.e(5735).then(n.bind(n,9696)),"@site/docs/server-docs/parental-control.md",9696],"8c4108df":[()=>n.e(179).then(n.bind(n,8794)),"@site/docs/server-docs/setup/docker-compose.md",8794],"8e064018":[()=>n.e(3163).then(n.t.bind(n,8232,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-celebration-of-achievements-856.json",8232],"8ea09047":[()=>n.e(9385).then(n.t.bind(n,600,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-page-2-433.json",600],"8f8e2e78":[()=>n.e(1142).then(n.t.bind(n,2884,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-future-development-ef2.json",2884],"8ff99662":[()=>n.e(6355).then(n.t.bind(n,4466,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-app-80a.json",4466],"9019cc36":[()=>n.e(8095).then(n.bind(n,8216)),"@site/blog/2024-10-20.md",8216],"9046e000":[()=>n.e(6013).then(n.t.bind(n,6231,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-solution-4b2.json",6231],"9147d3af":[()=>n.e(1840).then(n.bind(n,8396)),"@site/blog/2024-03-28.md?truncated=true",8396],"915cb6f7":[()=>n.e(384).then(n.t.bind(n,9547,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-april-fools-1f0.json",9547],92440753:[()=>n.e(2873).then(n.t.bind(n,4787,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-financial-assistance-4b1.json",4787],"92fb1dcd":[()=>n.e(9552).then(n.t.bind(n,6129,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-roadmap-e35.json",6129],"9404f843":[()=>n.e(5849).then(n.bind(n,340)),"@site/docs/gamevault-plus/client-apis.md",340],"9748c478":[()=>n.e(3911).then(n.bind(n,8169)),"@site/blog/2023-07-15.md",8169],"979ccdb6":[()=>n.e(2082).then(n.t.bind(n,4846,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-racist-e34.json",4846],"99d3d5ac":[()=>n.e(9931).then(n.t.bind(n,5845,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-development-d1f.json",5845],"99f2b7e6":[()=>n.e(4309).then(n.t.bind(n,5318,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-twitch-tv-219.json",5318],"9b1663d8":[()=>n.e(8446).then(n.t.bind(n,8819,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-66f.json",8819],"9b95b357":[()=>n.e(8069).then(n.t.bind(n,8642,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-servers-279.json",8642],"9d5a95a9":[()=>n.e(7782).then(n.t.bind(n,8324,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-igdb-8f8.json",8324],"9d86e7fa":[()=>n.e(4129).then(n.t.bind(n,1136,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-announcement-97a.json",1136],"9d9f8394":[()=>n.e(9013).then(n.bind(n,3303)),"@site/docs/troubleshooting.md",3303],"9e4087bc":[()=>n.e(2711).then(n.bind(n,4597)),"@theme/BlogArchivePage",4597],"9e75d8bf":[()=>n.e(6569).then(n.t.bind(n,324,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-platform-values-e98.json",324],"9fafd272":[()=>n.e(9482).then(n.t.bind(n,3917,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-50c.json",3917],a1072f2a:[()=>n.e(4365).then(n.bind(n,8136)),"@site/docs/client-docs/gui.md",8136],a1216fa4:[()=>n.e(8457).then(n.bind(n,81)),"@site/blog/2023-07-24.md",81],a1f57275:[()=>n.e(2333).then(n.bind(n,2348)),"@site/blog/2023-07-01.md",2348],a3fd4b44:[()=>n.e(11).then(n.t.bind(n,4080,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-file-server-7d3.json",4080],a67f6c3e:[()=>n.e(2652).then(n.t.bind(n,5054,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-videogame-96d.json",5054],a6aa9e1f:[()=>Promise.all([n.e(1869),n.e(349),n.e(3990),n.e(7643)]).then(n.bind(n,4939)),"@theme/BlogListPage",4939],a6fed517:[()=>n.e(7672).then(n.t.bind(n,5219,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-database-781.json",5219],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,7278)),"@theme/DocVersionRoot",7278],a7d982d4:[()=>n.e(7268).then(n.t.bind(n,6713,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-e0e.json",6713],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,4590)),"@theme/DocRoot",4590],ab6782ba:[()=>n.e(4146).then(n.t.bind(n,9535,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-steam-739.json",9535],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],acecf23e:[()=>n.e(1903).then(n.t.bind(n,1912,19)),"~blog/default/blogMetadata-default.json",1912],aeb57253:[()=>n.e(885).then(n.t.bind(n,9253,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-surge-of-new-users-416.json",9253],b1d7f5b9:[()=>n.e(1387).then(n.bind(n,9091)),"@site/docs/server-docs/indexing.md",9091],b28c3188:[()=>n.e(3468).then(n.bind(n,6266)),"@site/docs/server-docs/configuration.md",6266],b2ade0e8:[()=>n.e(6216).then(n.t.bind(n,391,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-open-source-bc6.json",391],b2c9ad8a:[()=>n.e(5541).then(n.t.bind(n,2523,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-app-optimization-286.json",2523],b4068411:[()=>n.e(7881).then(n.bind(n,763)),"@site/docs/server-docs/setup/caprover.md",763],b493ea72:[()=>n.e(5124).then(n.bind(n,165)),"@site/blog/2023-07-20.md",165],b7026fb3:[()=>n.e(8033).then(n.bind(n,1620)),"@site/blog/2023-07-09.md",1620],b8ecf3c5:[()=>n.e(7508).then(n.bind(n,1289)),"@site/docs/client-docs/setup.md",1289],ba3af7ad:[()=>n.e(9378).then(n.bind(n,5085)),"@site/blog/2023-07-08.md?truncated=true",5085],ba57e113:[()=>n.e(7766).then(n.bind(n,2746)),"@site/docs/license-contribute.md",2746],bb12dd4d:[()=>n.e(5774).then(n.t.bind(n,5990,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-logo-concept-discussion-9f8.json",5990],bc0aa6af:[()=>n.e(9155).then(n.t.bind(n,5251,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-plugin-system-7eb.json",5251],bcc2422e:[()=>n.e(1312).then(n.t.bind(n,6299,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ui-redesign-87d.json",6299],bdf26d57:[()=>n.e(671).then(n.t.bind(n,2166,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-collaboration-ed6.json",2166],c15d9823:[()=>n.e(8146).then(n.t.bind(n,9328,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-bd9.json",9328],c332f8df:[()=>n.e(482).then(n.bind(n,7861)),"@site/blog/2023-07-19.md",7861],c4f5d8e4:[()=>Promise.all([n.e(1869),n.e(2634)]).then(n.bind(n,7933)),"@site/src/pages/index.js",7933],c71ef62c:[()=>n.e(8790).then(n.t.bind(n,1187,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-keyhole-representation-72c.json",1187],c7bbcbc7:[()=>n.e(6260).then(n.t.bind(n,2227,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-startup-dff.json",2227],c8472403:[()=>n.e(2932).then(n.t.bind(n,3926,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-special-thanks-d94.json",3926],c89c7974:[()=>n.e(9267).then(n.bind(n,2830)),"@site/docs/advanced-usage/rest-api.md",2830],c8fbe42c:[()=>n.e(9748).then(n.t.bind(n,4022,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-selfhosted-podcast-cda.json",4022],c9618c72:[()=>n.e(9484).then(n.t.bind(n,3718,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-official-installations-22e.json",3718],c9cac9d9:[()=>n.e(4918).then(n.t.bind(n,371,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-release-6bd.json",371],c9d2adb2:[()=>n.e(3506).then(n.bind(n,9829)),"@site/docs/gamevault-plus/client-setup.md",9829],ca2d5c98:[()=>n.e(9218).then(n.t.bind(n,7527,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-motivation-041.json",7527],cc0b9cf0:[()=>n.e(4605).then(n.t.bind(n,8043,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-source-available-927.json",8043],cc616304:[()=>n.e(2419).then(n.t.bind(n,5029,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-easter-egg-364.json",5029],ccc49370:[()=>Promise.all([n.e(1869),n.e(349),n.e(3990),n.e(3249)]).then(n.bind(n,261)),"@theme/BlogPostPage",261],cd59c184:[()=>n.e(9272).then(n.bind(n,3784)),"@site/blog/2024-04-14.md",3784],cd781ce1:[()=>n.e(1377).then(n.t.bind(n,1138,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-voting-6d1.json",1138],cddec16f:[()=>n.e(2275).then(n.bind(n,5240)),"@site/docs/server-docs/setup/native.md",5240],cee5390f:[()=>n.e(5339).then(n.t.bind(n,6775,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ui-update-5b0.json",6775],d527dda4:[()=>n.e(4440).then(n.t.bind(n,7926,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-coding-chronicle-d70.json",7926],d53cd084:[()=>n.e(1504).then(n.t.bind(n,6997,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-parental-control-493.json",6997],d5823966:[()=>n.e(3088).then(n.t.bind(n,628,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-features-ebb.json",628],d5dcebd7:[()=>n.e(6659).then(n.t.bind(n,4810,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-new-name-7a4.json",4810],d6138fd2:[()=>n.e(9329).then(n.t.bind(n,5064,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-user-engagement-9c0.json",5064],d82a1228:[()=>n.e(3867).then(n.t.bind(n,6850,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-early-access-da1.json",6850],d9341347:[()=>n.e(2680).then(n.t.bind(n,9622,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-multi-user-authentication-6f6.json",9622],d9d4e1f1:[()=>n.e(8987).then(n.bind(n,1384)),"@site/blog/2023-11-20.md?truncated=true",1384],daddf69a:[()=>n.e(2256).then(n.t.bind(n,4674,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gaming-community-bc6.json",4674],daf02673:[()=>n.e(8022).then(n.t.bind(n,8461,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-public-cb9.json",8461],db0b0363:[()=>n.e(9).then(n.t.bind(n,5674,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-licensing-7b3.json",5674],dc8e8e39:[()=>n.e(488).then(n.t.bind(n,5102,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-community-623.json",5102],dcb9a9e8:[()=>n.e(8190).then(n.bind(n,4608)),"@site/docs/advanced-usage/linux-client.md",4608],dd9b1d9d:[()=>n.e(1822).then(n.t.bind(n,1251,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-success-3d9.json",1251],defc3e62:[()=>n.e(2251).then(n.t.bind(n,7761,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-sustainability-369.json",7761],df8deb2d:[()=>n.e(8530).then(n.t.bind(n,8878,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-game-vault-milestone-4c3.json",8878],e07621e3:[()=>n.e(2220).then(n.t.bind(n,2,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-love-for-game-vault-828.json",2],e0a15777:[()=>n.e(4160).then(n.t.bind(n,6413,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-revenue-generation-e31.json",6413],e0c5798e:[()=>n.e(7125).then(n.bind(n,1568)),"@site/blog/2024-03-28.md",1568],e0da75fc:[()=>n.e(6328).then(n.bind(n,4903)),"@site/docs/advanced-usage/steamdeck.md",4903],e3409e91:[()=>n.e(6231).then(n.t.bind(n,210,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-cfa.json",210],e46b1034:[()=>n.e(1182).then(n.t.bind(n,2382,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-partnerships-171.json",2382],e4878929:[()=>n.e(7933).then(n.t.bind(n,3121,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-community-growth-95a.json",3121],e5c4b825:[()=>n.e(933).then(n.t.bind(n,8003,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-migration-finalization-c0b.json",8003],e623129a:[()=>n.e(9508).then(n.t.bind(n,5353,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-future-features-136.json",5353],e6a59d41:[()=>n.e(2246).then(n.bind(n,8893)),"@site/docs/server-docs/user-management.md",8893],e70842e4:[()=>n.e(9830).then(n.bind(n,5668)),"@site/blog/2024-04-14.md?truncated=true",5668],e78c2f6e:[()=>n.e(8104).then(n.t.bind(n,1853,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-creepy-behavior-daa.json",1853],e7aa45d5:[()=>n.e(1837).then(n.bind(n,9294)),"@site/blog/2023-07-29.md",9294],e935068c:[()=>n.e(5872).then(n.t.bind(n,2953,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-discord-server-e37.json",2953],e98ed1e4:[()=>n.e(8966).then(n.t.bind(n,1534,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-name-migration-progress-68d.json",1534],e9e0f988:[()=>n.e(6929).then(n.bind(n,4462)),"@site/docs/client-docs/updating-client.md",4462],e9e1de17:[()=>n.e(7722).then(n.t.bind(n,5062,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-software-development-c0f.json",5062],ec46a009:[()=>n.e(8983).then(n.bind(n,490)),"@site/docs/gamevault-plus/introduction.md",490],eda4f68b:[()=>n.e(7505).then(n.t.bind(n,8268,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ai-generated-names-ac1.json",8268],ee98c124:[()=>n.e(1764).then(n.bind(n,4469)),"@site/docs/advanced-usage/failt2ban.md",4469],ef8b811a:[()=>n.e(8947).then(n.t.bind(n,6600,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-790.json",6600],f2a7e769:[()=>n.e(1200).then(n.t.bind(n,9517,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-sharing-blog-posts-3f1.json",9517],f4d4319b:[()=>n.e(1784).then(n.bind(n,749)),"@site/docs/server-docs/setup/setup.md",749],f525eb8a:[()=>n.e(8787).then(n.t.bind(n,9805,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-api-049.json",9805],f58fbef8:[()=>n.e(6071).then(n.t.bind(n,2844,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-feedback-67f.json",2844],f5b06269:[()=>n.e(2641).then(n.bind(n,5205)),"@site/docs/gamevault-plus/themes.md",5205],f677311a:[()=>n.e(7831).then(n.t.bind(n,7032,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-inclusivity-cdf.json",7032],f6f174b1:[()=>n.e(1922).then(n.t.bind(n,2334,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-beta-testing-146.json",2334],f81c1134:[()=>n.e(5749).then(n.t.bind(n,7735,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-f05.json",7735],f8aea940:[()=>n.e(6557).then(n.bind(n,5238)),"@site/docs/client-docs/themes.md",5238],f94e70f3:[()=>n.e(9589).then(n.t.bind(n,1552,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-drm-free-406.json",1552],fb0a08ce:[()=>n.e(4034).then(n.bind(n,6323)),"@site/blog/2023-07-24.md?truncated=true",6323],fb0e7a2f:[()=>n.e(494).then(n.t.bind(n,7197,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-rawg-6b2.json",7197],fbaf179c:[()=>n.e(6490).then(n.bind(n,9241)),"@site/blog/2024-05-07.md",9241],fcad5cc1:[()=>n.e(9921).then(n.t.bind(n,5176,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-development-c3c.json",5176],fe2b2ad8:[()=>n.e(1219).then(n.bind(n,1835)),"@site/blog/2024-05-07.md?truncated=true",1835],fee02ac9:[()=>n.e(3936).then(n.t.bind(n,9898,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-council-member-71b.json",9898],ff51e3f1:[()=>n.e(4070).then(n.t.bind(n,257,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-support-request-58e.json",257]};var s=n(6070);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(5743),u=n(5612);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(2731).then(n.bind(n,2731)),modules:["@theme/NotFound"],webpack:()=>[2731],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],g=(0,c.A)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const p=[{path:"/blog",component:d("/blog","deb"),exact:!0},{path:"/blog/2023/07/01/",component:d("/blog/2023/07/01/","30b"),exact:!0},{path:"/blog/2023/07/08/",component:d("/blog/2023/07/08/","d10"),exact:!0},{path:"/blog/2023/07/09/",component:d("/blog/2023/07/09/","2c2"),exact:!0},{path:"/blog/2023/07/13/",component:d("/blog/2023/07/13/","6e5"),exact:!0},{path:"/blog/2023/07/15/",component:d("/blog/2023/07/15/","b20"),exact:!0},{path:"/blog/2023/07/19/",component:d("/blog/2023/07/19/","8a6"),exact:!0},{path:"/blog/2023/07/20/",component:d("/blog/2023/07/20/","9b6"),exact:!0},{path:"/blog/2023/07/24/",component:d("/blog/2023/07/24/","4f4"),exact:!0},{path:"/blog/2023/07/29/",component:d("/blog/2023/07/29/","44c"),exact:!0},{path:"/blog/2023/11/20/",component:d("/blog/2023/11/20/","3f2"),exact:!0},{path:"/blog/2023/12/09/",component:d("/blog/2023/12/09/","d2c"),exact:!0},{path:"/blog/2024/03/28/",component:d("/blog/2024/03/28/","60b"),exact:!0},{path:"/blog/2024/04/01/2024-04-01/",component:d("/blog/2024/04/01/2024-04-01/","59c"),exact:!0},{path:"/blog/2024/04/14/",component:d("/blog/2024/04/14/","e89"),exact:!0},{path:"/blog/2024/05/07/",component:d("/blog/2024/05/07/","2dc"),exact:!0},{path:"/blog/2024/10/20/",component:d("/blog/2024/10/20/","4e9"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","182"),exact:!0},{path:"/blog/authors",component:d("/blog/authors","0b7"),exact:!0},{path:"/blog/page/2",component:d("/blog/page/2","fd3"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","287"),exact:!0},{path:"/blog/tags/age-restrictions",component:d("/blog/tags/age-restrictions","8da"),exact:!0},{path:"/blog/tags/ai-generated-names",component:d("/blog/tags/ai-generated-names","de1"),exact:!0},{path:"/blog/tags/alternative",component:d("/blog/tags/alternative","0cb"),exact:!0},{path:"/blog/tags/analytics",component:d("/blog/tags/analytics","105"),exact:!0},{path:"/blog/tags/announcement",component:d("/blog/tags/announcement","3ab"),exact:!0},{path:"/blog/tags/api",component:d("/blog/tags/api","d97"),exact:!0},{path:"/blog/tags/app",component:d("/blog/tags/app","f50"),exact:!0},{path:"/blog/tags/app-name-migration",component:d("/blog/tags/app-name-migration","b3d"),exact:!0},{path:"/blog/tags/app-optimization",component:d("/blog/tags/app-optimization","4b7"),exact:!0},{path:"/blog/tags/april-fools",component:d("/blog/tags/april-fools","45b"),exact:!0},{path:"/blog/tags/backend",component:d("/blog/tags/backend","bc5"),exact:!0},{path:"/blog/tags/backend-application-migration",component:d("/blog/tags/backend-application-migration","ea3"),exact:!0},{path:"/blog/tags/beta-testing",component:d("/blog/tags/beta-testing","8e3"),exact:!0},{path:"/blog/tags/blackmail",component:d("/blog/tags/blackmail","2a4"),exact:!0},{path:"/blog/tags/box-representation",component:d("/blog/tags/box-representation","400"),exact:!0},{path:"/blog/tags/bugs",component:d("/blog/tags/bugs","ff5"),exact:!0},{path:"/blog/tags/celebration-of-achievements",component:d("/blog/tags/celebration-of-achievements","f97"),exact:!0},{path:"/blog/tags/client-application-update",component:d("/blog/tags/client-application-update","45e"),exact:!0},{path:"/blog/tags/client-update",component:d("/blog/tags/client-update","d5b"),exact:!0},{path:"/blog/tags/cloud-based-game-platforms",component:d("/blog/tags/cloud-based-game-platforms","a94"),exact:!0},{path:"/blog/tags/code-access",component:d("/blog/tags/code-access","1ef"),exact:!0},{path:"/blog/tags/coding-chronicle",component:d("/blog/tags/coding-chronicle","d18"),exact:!0},{path:"/blog/tags/collaboration",component:d("/blog/tags/collaboration","f74"),exact:!0},{path:"/blog/tags/community",component:d("/blog/tags/community","e39"),exact:!0},{path:"/blog/tags/community-driven",component:d("/blog/tags/community-driven","63b"),exact:!0},{path:"/blog/tags/community-feedback",component:d("/blog/tags/community-feedback","3ee"),exact:!0},{path:"/blog/tags/community-management",component:d("/blog/tags/community-management","93f"),exact:!0},{path:"/blog/tags/continued-support",component:d("/blog/tags/continued-support","afc"),exact:!0},{path:"/blog/tags/control",component:d("/blog/tags/control","04d"),exact:!0},{path:"/blog/tags/council-member",component:d("/blog/tags/council-member","a6a"),exact:!0},{path:"/blog/tags/creepy-behavior",component:d("/blog/tags/creepy-behavior","090"),exact:!0},{path:"/blog/tags/database",component:d("/blog/tags/database","ff5"),exact:!0},{path:"/blog/tags/decision-making",component:d("/blog/tags/decision-making","532"),exact:!0},{path:"/blog/tags/developers",component:d("/blog/tags/developers","487"),exact:!0},{path:"/blog/tags/development",component:d("/blog/tags/development","b27"),exact:!0},{path:"/blog/tags/development-milestones",component:d("/blog/tags/development-milestones","1c9"),exact:!0},{path:"/blog/tags/discord",component:d("/blog/tags/discord","6df"),exact:!0},{path:"/blog/tags/discord-channel",component:d("/blog/tags/discord-channel","b2d"),exact:!0},{path:"/blog/tags/discord-community-growth",component:d("/blog/tags/discord-community-growth","136"),exact:!0},{path:"/blog/tags/discord-server",component:d("/blog/tags/discord-server","e4d"),exact:!0},{path:"/blog/tags/discord-server-promotion",component:d("/blog/tags/discord-server-promotion","f55"),exact:!0},{path:"/blog/tags/documentation-migration",component:d("/blog/tags/documentation-migration","405"),exact:!0},{path:"/blog/tags/domain-acquisition",component:d("/blog/tags/domain-acquisition","e1a"),exact:!0},{path:"/blog/tags/drm-free",component:d("/blog/tags/drm-free","c7e"),exact:!0},{path:"/blog/tags/drm-free-games",component:d("/blog/tags/drm-free-games","6cf"),exact:!0},{path:"/blog/tags/early-access",component:d("/blog/tags/early-access","ed5"),exact:!0},{path:"/blog/tags/easter-egg",component:d("/blog/tags/easter-egg","7c7"),exact:!0},{path:"/blog/tags/engagement",component:d("/blog/tags/engagement","b3b"),exact:!0},{path:"/blog/tags/exclusive-preview",component:d("/blog/tags/exclusive-preview","0fe"),exact:!0},{path:"/blog/tags/family-friendly",component:d("/blog/tags/family-friendly","282"),exact:!0},{path:"/blog/tags/feature-requests",component:d("/blog/tags/feature-requests","61d"),exact:!0},{path:"/blog/tags/features",component:d("/blog/tags/features","3d5"),exact:!0},{path:"/blog/tags/feedback",component:d("/blog/tags/feedback","a81"),exact:!0},{path:"/blog/tags/file-server",component:d("/blog/tags/file-server","f0b"),exact:!0},{path:"/blog/tags/financial-assistance",component:d("/blog/tags/financial-assistance","e64"),exact:!0},{path:"/blog/tags/future-development",component:d("/blog/tags/future-development","db0"),exact:!0},{path:"/blog/tags/future-features",component:d("/blog/tags/future-features","bed"),exact:!0},{path:"/blog/tags/game",component:d("/blog/tags/game","a29"),exact:!0},{path:"/blog/tags/game-development",component:d("/blog/tags/game-development","97c"),exact:!0},{path:"/blog/tags/game-hub",component:d("/blog/tags/game-hub","6c3"),exact:!0},{path:"/blog/tags/game-shelf",component:d("/blog/tags/game-shelf","566"),exact:!0},{path:"/blog/tags/game-stash",component:d("/blog/tags/game-stash","728"),exact:!0},{path:"/blog/tags/game-vault",component:d("/blog/tags/game-vault","39f"),exact:!0},{path:"/blog/tags/game-vault-app",component:d("/blog/tags/game-vault-app","bd6"),exact:!0},{path:"/blog/tags/game-vault-domain",component:d("/blog/tags/game-vault-domain","a5b"),exact:!0},{path:"/blog/tags/game-vault-journey",component:d("/blog/tags/game-vault-journey","52d"),exact:!0},{path:"/blog/tags/game-vault-milestone",component:d("/blog/tags/game-vault-milestone","030"),exact:!0},{path:"/blog/tags/gaming",component:d("/blog/tags/gaming","2b9"),exact:!0},{path:"/blog/tags/gaming-community",component:d("/blog/tags/gaming-community","73c"),exact:!0},{path:"/blog/tags/gaming-experience",component:d("/blog/tags/gaming-experience","f8c"),exact:!0},{path:"/blog/tags/gaming-platform",component:d("/blog/tags/gaming-platform","12f"),exact:!0},{path:"/blog/tags/gaming-servers",component:d("/blog/tags/gaming-servers","e66"),exact:!0},{path:"/blog/tags/git-hub",component:d("/blog/tags/git-hub","590"),exact:!0},{path:"/blog/tags/git-hub-issue",component:d("/blog/tags/git-hub-issue","8a0"),exact:!0},{path:"/blog/tags/gratitude",component:d("/blog/tags/gratitude","1d7"),exact:!0},{path:"/blog/tags/harassment",component:d("/blog/tags/harassment","89d"),exact:!0},{path:"/blog/tags/harbor",component:d("/blog/tags/harbor","a9f"),exact:!0},{path:"/blog/tags/health-monitoring",component:d("/blog/tags/health-monitoring","d88"),exact:!0},{path:"/blog/tags/hybrid-model",component:d("/blog/tags/hybrid-model","038"),exact:!0},{path:"/blog/tags/igdb",component:d("/blog/tags/igdb","6ff"),exact:!0},{path:"/blog/tags/improvement",component:d("/blog/tags/improvement","0af"),exact:!0},{path:"/blog/tags/inclusivity",component:d("/blog/tags/inclusivity","7a0"),exact:!0},{path:"/blog/tags/installation-pipeline",component:d("/blog/tags/installation-pipeline","94b"),exact:!0},{path:"/blog/tags/kanban-board",component:d("/blog/tags/kanban-board","372"),exact:!0},{path:"/blog/tags/keyhole-representation",component:d("/blog/tags/keyhole-representation","ae7"),exact:!0},{path:"/blog/tags/lemmy-community",component:d("/blog/tags/lemmy-community","a2d"),exact:!0},{path:"/blog/tags/lemmy-community-launch",component:d("/blog/tags/lemmy-community-launch","9dd"),exact:!0},{path:"/blog/tags/lemmy-forum",component:d("/blog/tags/lemmy-forum","7bd"),exact:!0},{path:"/blog/tags/logo-concept-discussion",component:d("/blog/tags/logo-concept-discussion","7e7"),exact:!0},{path:"/blog/tags/logo-deciphering",component:d("/blog/tags/logo-deciphering","dc4"),exact:!0},{path:"/blog/tags/love-for-game-vault",component:d("/blog/tags/love-for-game-vault","2f9"),exact:!0},{path:"/blog/tags/market-analysis",component:d("/blog/tags/market-analysis","c1c"),exact:!0},{path:"/blog/tags/metadata",component:d("/blog/tags/metadata","2c9"),exact:!0},{path:"/blog/tags/metadata-framework",component:d("/blog/tags/metadata-framework","bc5"),exact:!0},{path:"/blog/tags/microsoft-store",component:d("/blog/tags/microsoft-store","cc8"),exact:!0},{path:"/blog/tags/microsoft-store-publication",component:d("/blog/tags/microsoft-store-publication","a3d"),exact:!0},{path:"/blog/tags/migration-finalization",component:d("/blog/tags/migration-finalization","138"),exact:!0},{path:"/blog/tags/motivation",component:d("/blog/tags/motivation","8c7"),exact:!0},{path:"/blog/tags/multi-user-authentication",component:d("/blog/tags/multi-user-authentication","3a5"),exact:!0},{path:"/blog/tags/name-migration-progress",component:d("/blog/tags/name-migration-progress","396"),exact:!0},{path:"/blog/tags/negative-narratives",component:d("/blog/tags/negative-narratives","ef7"),exact:!0},{path:"/blog/tags/new-logo",component:d("/blog/tags/new-logo","3d9"),exact:!0},{path:"/blog/tags/new-name",component:d("/blog/tags/new-name","28c"),exact:!0},{path:"/blog/tags/new-name-announcement",component:d("/blog/tags/new-name-announcement","7b6"),exact:!0},{path:"/blog/tags/notes",component:d("/blog/tags/notes","f1b"),exact:!0},{path:"/blog/tags/november-update",component:d("/blog/tags/november-update","a61"),exact:!0},{path:"/blog/tags/official-installations",component:d("/blog/tags/official-installations","733"),exact:!0},{path:"/blog/tags/open-source",component:d("/blog/tags/open-source","6be"),exact:!0},{path:"/blog/tags/parental-control",component:d("/blog/tags/parental-control","65b"),exact:!0},{path:"/blog/tags/partnership",component:d("/blog/tags/partnership","0de"),exact:!0},{path:"/blog/tags/partnerships",component:d("/blog/tags/partnerships","588"),exact:!0},{path:"/blog/tags/platform",component:d("/blog/tags/platform","0bc"),exact:!0},{path:"/blog/tags/platform-values",component:d("/blog/tags/platform-values","376"),exact:!0},{path:"/blog/tags/plugin-system",component:d("/blog/tags/plugin-system","4f9"),exact:!0},{path:"/blog/tags/poll",component:d("/blog/tags/poll","eda"),exact:!0},{path:"/blog/tags/poll-results",component:d("/blog/tags/poll-results","2a9"),exact:!0},{path:"/blog/tags/polls",component:d("/blog/tags/polls","829"),exact:!0},{path:"/blog/tags/public",component:d("/blog/tags/public","f5f"),exact:!0},{path:"/blog/tags/racist",component:d("/blog/tags/racist","2bb"),exact:!0},{path:"/blog/tags/rawg",component:d("/blog/tags/rawg","5ed"),exact:!0},{path:"/blog/tags/rawg-api",component:d("/blog/tags/rawg-api","751"),exact:!0},{path:"/blog/tags/reddit-forum",component:d("/blog/tags/reddit-forum","61e"),exact:!0},{path:"/blog/tags/release",component:d("/blog/tags/release","15f"),exact:!0},{path:"/blog/tags/renaming-app",component:d("/blog/tags/renaming-app","d2c"),exact:!0},{path:"/blog/tags/revenue-generation",component:d("/blog/tags/revenue-generation","68c"),exact:!0},{path:"/blog/tags/roadmap",component:d("/blog/tags/roadmap","e17"),exact:!0},{path:"/blog/tags/safe-environment",component:d("/blog/tags/safe-environment","620"),exact:!0},{path:"/blog/tags/self-hosted",component:d("/blog/tags/self-hosted","19e"),exact:!0},{path:"/blog/tags/self-hosted-newsletter",component:d("/blog/tags/self-hosted-newsletter","b53"),exact:!0},{path:"/blog/tags/selfhosted-podcast",component:d("/blog/tags/selfhosted-podcast","8d7"),exact:!0},{path:"/blog/tags/server-update",component:d("/blog/tags/server-update","7ee"),exact:!0},{path:"/blog/tags/sharing-blog-posts",component:d("/blog/tags/sharing-blog-posts","2e3"),exact:!0},{path:"/blog/tags/simplifying-game-installation",component:d("/blog/tags/simplifying-game-installation","0a0"),exact:!0},{path:"/blog/tags/software",component:d("/blog/tags/software","ed0"),exact:!0},{path:"/blog/tags/software-development",component:d("/blog/tags/software-development","f78"),exact:!0},{path:"/blog/tags/software-licensing",component:d("/blog/tags/software-licensing","6a0"),exact:!0},{path:"/blog/tags/software-updates",component:d("/blog/tags/software-updates","742"),exact:!0},{path:"/blog/tags/solution",component:d("/blog/tags/solution","a71"),exact:!0},{path:"/blog/tags/source-available",component:d("/blog/tags/source-available","501"),exact:!0},{path:"/blog/tags/source-available-software",component:d("/blog/tags/source-available-software","42f"),exact:!0},{path:"/blog/tags/spam",component:d("/blog/tags/spam","99a"),exact:!0},{path:"/blog/tags/special-thanks",component:d("/blog/tags/special-thanks","721"),exact:!0},{path:"/blog/tags/speculation",component:d("/blog/tags/speculation","691"),exact:!0},{path:"/blog/tags/spreading-the-word",component:d("/blog/tags/spreading-the-word","9a5"),exact:!0},{path:"/blog/tags/startup",component:d("/blog/tags/startup","387"),exact:!0},{path:"/blog/tags/steam",component:d("/blog/tags/steam","5cb"),exact:!0},{path:"/blog/tags/subreddit-migration",component:d("/blog/tags/subreddit-migration","bf0"),exact:!0},{path:"/blog/tags/subscription",component:d("/blog/tags/subscription","088"),exact:!0},{path:"/blog/tags/subscription-model",component:d("/blog/tags/subscription-model","7e6"),exact:!0},{path:"/blog/tags/subscription-to-updates-role",component:d("/blog/tags/subscription-to-updates-role","97f"),exact:!0},{path:"/blog/tags/success",component:d("/blog/tags/success","cc5"),exact:!0},{path:"/blog/tags/support",component:d("/blog/tags/support","a33"),exact:!0},{path:"/blog/tags/support-request",component:d("/blog/tags/support-request","99a"),exact:!0},{path:"/blog/tags/surge-of-new-users",component:d("/blog/tags/surge-of-new-users","4ba"),exact:!0},{path:"/blog/tags/sustainability",component:d("/blog/tags/sustainability","5a8"),exact:!0},{path:"/blog/tags/tech-progress",component:d("/blog/tags/tech-progress","1f3"),exact:!0},{path:"/blog/tags/testing",component:d("/blog/tags/testing","ad7"),exact:!0},{path:"/blog/tags/theme",component:d("/blog/tags/theme","6c7"),exact:!0},{path:"/blog/tags/threats",component:d("/blog/tags/threats","3f9"),exact:!0},{path:"/blog/tags/transition-process",component:d("/blog/tags/transition-process","a0e"),exact:!0},{path:"/blog/tags/transparency",component:d("/blog/tags/transparency","7b3"),exact:!0},{path:"/blog/tags/trolls",component:d("/blog/tags/trolls","22a"),exact:!0},{path:"/blog/tags/twitch-tv",component:d("/blog/tags/twitch-tv","c17"),exact:!0},{path:"/blog/tags/ui-redesign",component:d("/blog/tags/ui-redesign","1e3"),exact:!0},{path:"/blog/tags/ui-update",component:d("/blog/tags/ui-update","0da"),exact:!0},{path:"/blog/tags/upcoming-update",component:d("/blog/tags/upcoming-update","f39"),exact:!0},{path:"/blog/tags/update",component:d("/blog/tags/update","fa1"),exact:!0},{path:"/blog/tags/updates",component:d("/blog/tags/updates","125"),exact:!0},{path:"/blog/tags/user-engagement",component:d("/blog/tags/user-engagement","51e"),exact:!0},{path:"/blog/tags/user-participation",component:d("/blog/tags/user-participation","15b"),exact:!0},{path:"/blog/tags/video-games",component:d("/blog/tags/video-games","b8c"),exact:!0},{path:"/blog/tags/videogame",component:d("/blog/tags/videogame","f65"),exact:!0},{path:"/blog/tags/voting",component:d("/blog/tags/voting","f23"),exact:!0},{path:"/docs",component:d("/docs","6d2"),routes:[{path:"/docs",component:d("/docs","ee7"),routes:[{path:"/docs",component:d("/docs","ad9"),routes:[{path:"/docs/advanced-usage/early-access-program",component:d("/docs/advanced-usage/early-access-program","8ae"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/fail2ban-gamevault-guide",component:d("/docs/advanced-usage/fail2ban-gamevault-guide","8b9"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/linux-client",component:d("/docs/advanced-usage/linux-client","71a"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/rest-api",component:d("/docs/advanced-usage/rest-api","c5a"),exact:!0,sidebar:"docs"},{path:"/docs/advanced-usage/steamdeck",component:d("/docs/advanced-usage/steamdeck","03e"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/data",component:d("/docs/client-docs/data","840"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/gui",component:d("/docs/client-docs/gui","e4a"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/how-to-use",component:d("/docs/client-docs/how-to-use","db9"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/setup",component:d("/docs/client-docs/setup","0c3"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/themes",component:d("/docs/client-docs/themes","e4c"),exact:!0,sidebar:"docs"},{path:"/docs/client-docs/updating-client",component:d("/docs/client-docs/updating-client","82b"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/client-apis",component:d("/docs/gamevault-plus/client-apis","0d7"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/client-setup",component:d("/docs/gamevault-plus/client-setup","7b9"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/introduction",component:d("/docs/gamevault-plus/introduction","442"),exact:!0,sidebar:"docs"},{path:"/docs/gamevault-plus/themes",component:d("/docs/gamevault-plus/themes","727"),exact:!0,sidebar:"docs"},{path:"/docs/intro",component:d("/docs/intro","ee2"),exact:!0,sidebar:"docs"},{path:"/docs/license-contribute",component:d("/docs/license-contribute","f9d"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/adding-games",component:d("/docs/server-docs/adding-games","3c5"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/backup-and-restore",component:d("/docs/server-docs/backup-and-restore","a7c"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/configuration",component:d("/docs/server-docs/configuration","5a1"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/game-types",component:d("/docs/server-docs/game-types","45a"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/indexing",component:d("/docs/server-docs/indexing","87c"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/media",component:d("/docs/server-docs/media","f31"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/metadata-enrichment/metadata",component:d("/docs/server-docs/metadata-enrichment/metadata","d00"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/metadata-enrichment/provider-igdb",component:d("/docs/server-docs/metadata-enrichment/provider-igdb","9f3"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/parental-control",component:d("/docs/server-docs/parental-control","c42"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/plugins",component:d("/docs/server-docs/plugins","44a"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/server-news",component:d("/docs/server-docs/server-news","dce"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/",component:d("/docs/server-docs/setup/","3dd"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/caprover",component:d("/docs/server-docs/setup/caprover","9dc"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/docker-compose",component:d("/docs/server-docs/setup/docker-compose","272"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/native",component:d("/docs/server-docs/setup/native","29e"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/synology-container-manager",component:d("/docs/server-docs/setup/synology-container-manager","621"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/truenas-scale",component:d("/docs/server-docs/setup/truenas-scale","d3f"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/truenas-scale-legacy",component:d("/docs/server-docs/setup/truenas-scale-legacy","a61"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/setup/unraid",component:d("/docs/server-docs/setup/unraid","5d9"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/structure",component:d("/docs/server-docs/structure","3e8"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/updating-games",component:d("/docs/server-docs/updating-games","59b"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/user-management",component:d("/docs/server-docs/user-management","38a"),exact:!0,sidebar:"docs"},{path:"/docs/server-docs/websockets",component:d("/docs/server-docs/websockets","b63"),exact:!0,sidebar:"docs"},{path:"/docs/troubleshooting",component:d("/docs/troubleshooting","84f"),exact:!0,sidebar:"docs"}]}]}]},{path:"/",component:d("/","2e1"),exact:!0},{path:"*",component:d("*")}]},622:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,g,m,b,h,y,v,_,w,x,S,k,E,O,j,P,C,A,T,I,N,L,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r 0){var l=R.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new R.Token(n.slice(i,a),l))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n 1&&(a e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t 0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new R.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r =e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s 1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o =this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos 1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},787:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(758),o=n(6070);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},6307:(e,t,n)=>{"use strict";var r=n(758),o=n(9576),a=n(248),i=n(1742),s=n(4784),l=n(5575);const c=[n(3905),n(4169),n(6436),n(171),n(4412)];var u=n(1151),d=n(5557),p=n(389),f=n(6070);function g(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var m=n(950),b=n(4480),h=n(2235),y=n(9618),v=n(5003),_=n(4703),w=n(980),x=n(1163),S=n(3652),k=n(4981);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,b.A)(),r=(0,_.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function O(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,b.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,b.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.Ks)((0,h.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(m.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function j(){const{i18n:{currentLocale:e}}=(0,b.A)(),{metadata:t,image:n}=(0,y.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(m.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(O,{}),(0,f.jsx)(E,{}),(0,f.jsx)(k.A,{tag:x.C,locale:e}),(0,f.jsx)(m.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const P=new Map;var C=n(787),A=n(790),T=n(3523);function I(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r {const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,T.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),I("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?I("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=I("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const D=R,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n \n\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return P.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return P.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(D,{location:e,children:q})}function K(){return(0,f.jsx)(V.A,{children:(0,f.jsx)(A.l,{children:(0,f.jsxs)(C.x,{children:[(0,f.jsxs)(g,{children:[(0,f.jsx)(H,{}),(0,f.jsx)(j,{}),(0,f.jsx)(U,{}),(0,f.jsx)(G,{})]}),(0,f.jsx)(W,{})]})})})}var Y=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(5743);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),L(e))},re=Object.freeze(ne);function oe(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ae=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(oe,{children:(0,f.jsx)(K,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ae)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};L(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},790:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(758),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"advanced-usage/early-access-program","path":"/docs/advanced-usage/early-access-program","sidebar":"docs"},{"id":"advanced-usage/fail2ban-gamevault-guide","path":"/docs/advanced-usage/fail2ban-gamevault-guide","sidebar":"docs"},{"id":"advanced-usage/linux-client","path":"/docs/advanced-usage/linux-client","sidebar":"docs"},{"id":"advanced-usage/rest-api","path":"/docs/advanced-usage/rest-api","sidebar":"docs"},{"id":"advanced-usage/steamdeck","path":"/docs/advanced-usage/steamdeck","sidebar":"docs"},{"id":"client-docs/data","path":"/docs/client-docs/data","sidebar":"docs"},{"id":"client-docs/gui","path":"/docs/client-docs/gui","sidebar":"docs"},{"id":"client-docs/how-to-use","path":"/docs/client-docs/how-to-use","sidebar":"docs"},{"id":"client-docs/setup","path":"/docs/client-docs/setup","sidebar":"docs"},{"id":"client-docs/themes","path":"/docs/client-docs/themes","sidebar":"docs"},{"id":"client-docs/updating-client","path":"/docs/client-docs/updating-client","sidebar":"docs"},{"id":"gamevault-plus/client-apis","path":"/docs/gamevault-plus/client-apis","sidebar":"docs"},{"id":"gamevault-plus/client-setup","path":"/docs/gamevault-plus/client-setup","sidebar":"docs"},{"id":"gamevault-plus/introduction","path":"/docs/gamevault-plus/introduction","sidebar":"docs"},{"id":"gamevault-plus/themes","path":"/docs/gamevault-plus/themes","sidebar":"docs"},{"id":"intro","path":"/docs/intro","sidebar":"docs"},{"id":"license-contribute","path":"/docs/license-contribute","sidebar":"docs"},{"id":"server-docs/adding-games","path":"/docs/server-docs/adding-games","sidebar":"docs"},{"id":"server-docs/backup-and-restore","path":"/docs/server-docs/backup-and-restore","sidebar":"docs"},{"id":"server-docs/configuration","path":"/docs/server-docs/configuration","sidebar":"docs"},{"id":"server-docs/game-types","path":"/docs/server-docs/game-types","sidebar":"docs"},{"id":"server-docs/indexing","path":"/docs/server-docs/indexing","sidebar":"docs"},{"id":"server-docs/media","path":"/docs/server-docs/media","sidebar":"docs"},{"id":"server-docs/metadata-enrichment/metadata","path":"/docs/server-docs/metadata-enrichment/metadata","sidebar":"docs"},{"id":"server-docs/metadata-enrichment/provider-igdb","path":"/docs/server-docs/metadata-enrichment/provider-igdb","sidebar":"docs"},{"id":"server-docs/parental-control","path":"/docs/server-docs/parental-control","sidebar":"docs"},{"id":"server-docs/plugins","path":"/docs/server-docs/plugins","sidebar":"docs"},{"id":"server-docs/server-news","path":"/docs/server-docs/server-news","sidebar":"docs"},{"id":"server-docs/setup/caprover","path":"/docs/server-docs/setup/caprover","sidebar":"docs"},{"id":"server-docs/setup/docker-compose","path":"/docs/server-docs/setup/docker-compose","sidebar":"docs"},{"id":"server-docs/setup/native","path":"/docs/server-docs/setup/native","sidebar":"docs"},{"id":"server-docs/setup/synology-container-manager","path":"/docs/server-docs/setup/synology-container-manager","sidebar":"docs"},{"id":"server-docs/setup/toc","path":"/docs/server-docs/setup/","sidebar":"docs"},{"id":"server-docs/setup/truenas-scale","path":"/docs/server-docs/setup/truenas-scale","sidebar":"docs"},{"id":"server-docs/setup/truenas-scale-legacy","path":"/docs/server-docs/setup/truenas-scale-legacy","sidebar":"docs"},{"id":"server-docs/setup/unraid","path":"/docs/server-docs/setup/unraid","sidebar":"docs"},{"id":"server-docs/structure","path":"/docs/server-docs/structure","sidebar":"docs"},{"id":"server-docs/updating-games","path":"/docs/server-docs/updating-games","sidebar":"docs"},{"id":"server-docs/user-management","path":"/docs/server-docs/user-management","sidebar":"docs"},{"id":"server-docs/websockets","path":"/docs/server-docs/websockets","sidebar":"docs"},{"id":"troubleshooting","path":"/docs/troubleshooting","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}},"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.6.2","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.6.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.6.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.6.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.6.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.6.2"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.6.2"},"docusaurus-plugin-image-zoom":{"type":"package","name":"docusaurus-plugin-image-zoom","version":"2.0.0"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.2.0"},"tailwind-plugin":{"type":"local"}}}');var c=n(6070);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},4496:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(758),o=n(5575),a=n(950),i=n(3652),s=n(3385),l=n(5612),c=n(6070);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const g=e=>(0,c.jsx)(f,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??g)(e)}return e??null}}},5575:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},950:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(758);var r=n(248),o=n(6070);function a(e){return(0,o.jsx)(r.mg,{...e})}},88:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(758),o=n(1742),a=n(3652),i=n(4480),s=n(2048),l=n(5575),c=n(9121),u=n(2235),d=n(6070);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":b,autoAddBaseUrl:h=!0,...y}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:_,baseUrl:w}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,u.hH)(),k=(0,c.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const O=p||f;const j=(0,s.A)(O),P=O?.replace("pathname://","");let C=void 0!==P?(A=P,h&&(e=>e.startsWith("/"))(A)?S(A):A):void 0;var A;"hash"===x&&C?.startsWith("./")&&(C=C?.slice(1)),C&&j&&(C=(0,a.Ks)(C,{trailingSlash:_,baseUrl:w}));const T=(0,r.useRef)(!1),I=n?o.k2:o.N_,N=l.A.canUseIntersectionObserver,L=(0,r.useRef)(),R=()=>{T.current||null==C||(window.docusaurus.preload(C),T.current=!0)};(0,r.useEffect)((()=>(!N&&j&&l.A.canUseDOM&&null!=C&&window.docusaurus.prefetch(C),()=>{N&&L.current&&L.current.disconnect()})),[L,C,N,j]);const D=C?.startsWith("#")??!1,F=!y.target||"_self"===y.target,M=!C||!j||!F||D&&"hash"!==x;b||!D&&M||k.collectLink(C),y.id&&k.collectAnchor(y.id);const z={};return M?(0,d.jsx)("a",{ref:E,href:C,...O&&!j&&{target:"_blank",rel:"noopener noreferrer"},...y,...z}):(0,d.jsx)(I,{...y,onMouseEnter:R,onTouchStart:R,innerRef:e=>{E.current=e,N&&e&&j&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),L.current.observe(e))},to:C,...n&&{isActive:m,activeClassName:g},...z})}const f=r.forwardRef(p)},8072:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(758),o=n(6070);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("IllegalYour Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = ${e} ${"/"===e?" (default value)":""}
\nWe suggest trying baseUrl =
\nchildren",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},8503:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},2048:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},2235:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(758),o=n(4480),a=n(2048);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9121:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(758);n(6070);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},4480:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(758),o=n(790);function a(){return(0,r.useContext)(o.o)}},1538:(e,t,n)=>{"use strict";n.d(t,{P_:()=>i,kh:()=>a});var r=n(4480),o=n(8503);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},5473:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(758),o=n(787);function a(){return(0,r.useContext)(o.o)}},3523:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(758);const o=n(5575).A.canUseDOM?r.useLayoutEffect:r.useEffect},4017:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(758),o=n(5612);function a(){const e=r.useContext(o.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},5743:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},5612:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(758),o=n(6070);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},6236:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>b,XK:()=>v,g1:()=>y});var r=n(758),o=n(150),a=n(8503),i=n(9618),s=n(7957),l=n(7888),c=n(6070);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function g(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=g();return(0,c.jsx)(f.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return(0,c.jsx)(m,{children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=h(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function v(){const e=(0,o.Gy)(),[t]=h();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},9419:(e,t,n)=>{"use strict";n.d(t,{k:()=>a,v:()=>i});var r=n(150),o=n(6236);function a(e,t){return`docs-${e}-${t}`}function i(){const e=(0,r.Gy)(),t=(0,r.gk)(),n=(0,o.XK)();return[...Object.keys(e).map((function(r){const o=t?.activePlugin.pluginId===r?t.activeVersion:void 0,i=n[r],s=e[r].versions.find((e=>e.isLast));return a(r,(o??i??s).name)}))]}},3139:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(758),o=n(7888),a=n(6070);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},1614:(e,t,n)=>{"use strict";n.d(t,{$S:()=>f,B5:()=>k,Nr:()=>p,OF:()=>_,QB:()=>S,Vd:()=>w,Y:()=>y,d1:()=>E,fW:()=>x,w8:()=>b});var r=n(758),o=n(5557),a=n(389),i=n(150),s=n(1197),l=n(5182),c=n(6236),u=n(6235),d=n(3139);function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}function f(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,s.ys)(e,t),m=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||m(e.items,t))}function h(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>h(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>h(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,s.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function _(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,l.sb)([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,l.sb)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,u.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.v)(i),sidebarName:l,sidebarItems:c}}function E(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!p(e)))}},6235:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(758),o=n(7888),a=n(6070);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},150:(e,t,n)=>{"use strict";n.d(t,{d1:()=>l.d1,zK:()=>y,vT:()=>g,gk:()=>m,Gy:()=>p,$S:()=>l.$S,HW:()=>v,vF:()=>u.v,ht:()=>f,g1:()=>c.g1,r7:()=>h,jh:()=>b});var r=n(5557),o=n(1538);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}function s(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}var l=n(1614),c=n(6236),u=n(9419);const d={},p=()=>(0,o.kh)("docusaurus-plugin-content-docs")??d,f=e=>{try{return(0,o.P_)("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function g(e){void 0===e&&(e={});const t=p(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function m(e){void 0===e&&(e={});const t=g(e),{pathname:n}=(0,r.zy)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function b(e){return f(e).versions}function h(e){const t=f(e);return a(t)}function y(e){const t=f(e),{pathname:n}=(0,r.zy)();return s(t,n)}function v(e){const t=f(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=a(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},3485:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t {"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(8744),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},4169:(e,t,n)=>{"use strict";var r=n(5371),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t,a=globalThis.Prism;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(1274),n(8104)(`./prism-${e}`)})),delete globalThis.Prism,void 0!==a&&(globalThis.Prism=e)}(r.My)},8038:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(758);var r=n(3526),o=n(8072),a=n(9618),i=n(88),s=n(9121);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_Hcr8",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_ZS6d"};var c=n(6070);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},4799:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(758);const r={iconExternalLink:"iconExternalLink_kYT9"};var o=n(6070);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},3385:(e,t,n)=>{"use strict";n.d(t,{A:()=>si});var r=n(758),o=n(3526),a=n(4496),i=n(5003),s=n(5557),l=n(8072),c=n(3354),u=n(6070);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var b=n(8539),h=n(980);const y={skipToContent:"skipToContent_HFi9"};function v(){return(0,u.jsx)(m,{className:y.skipToContent})}var _=n(9618),w=n(5309);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_ZG0G"};function k(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_W_Jx"};function O(e){const{announcementBar:t}=(0,_.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const j={announcementBar:"announcementBar_NWyD",announcementBarPlaceholder:"announcementBarPlaceholder_gnpf",announcementBarClose:"announcementBarClose_NR6a",announcementBarContent:"announcementBarContent_PrW2"};function P(){const{announcementBar:e}=(0,_.p)(),{isActive:t,close:n}=(0,w.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:j.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:j.announcementBarPlaceholder}),(0,u.jsx)(O,{className:j.announcementBarContent}),a&&(0,u.jsx)(k,{onClick:n,className:j.announcementBarClose})]})}var C=n(8260),A=n(372);var T=n(7888),I=n(5508);const N=r.createContext(null);function L(e){let{children:t}=e;const n=function(){const e=(0,C.M)(),t=(0,I.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,T.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(N);if(!e)throw new T.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,I.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(3617),z=n(5473);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_hXnJ",toggleButton:"toggleButton_MBwj",darkToggleIcon:"darkToggleIcon_JpX0",lightToggleIcon:"lightToggleIcon_QBrn",toggleButtonDisabled:"toggleButtonDisabled_ODKm"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite","aria-pressed":"dark"===r?"true":"false",children:[(0,u.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_Pd0z"};function W(e){let{className:t}=e;const n=(0,_.p)().navbar.style,r=(0,_.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.G)();return r?null:(0,u.jsx)(V,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var q=n(31);function G(){return(0,u.jsx)(q.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,C.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(G,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Z=n(88),X=n(2235),J=n(2048);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(4799);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),g=a&&o&&!(0,J.A)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,g&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Z.A,{href:l?f:o,...c,...m}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(5186),se=n(1197),le=n(4480);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_fvxk"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(va,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(va,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var ge=n(4703);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const be="iconLanguage_QjCn";var he=n(8143);function ye(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a e.length)&&(t=e.length);for(var n=0,r=new Array(t);n e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ie(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t =3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("clickedObjectIDsAfterSearch",Re(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("clickedObjectIDs",Re(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r 0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("convertedObjectIDsAfterSearch",Re(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&n("convertedObjectIDs",Re(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r 0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r 0&&t.reduce((function(e,t){var n=t.items,r=Te(t,je);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r 0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function Fe(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function ze(e){return ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ze(e)}function Be(e){return function(e){if(Array.isArray(e))return $e(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return $e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $e(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n 0&&qe({onItemsChange:r,items:n,insights:l,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function c(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:He(He({},i?{clickAnalytics:!0}:{}),e?{userToken:e}:{}),insights:l}})}s("addAlgoliaAgent","insights-plugin"),c(),s("onUserTokenChange",c),s("getUserToken",null,(function(e,t){c(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:l,item:t,insightsEvents:[He({eventName:"Item Selected"},Se({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:l,item:t,insightsEvents:[He({eventName:"Item Active"},Se({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function Ke(){var e,t=arguments.length>1?arguments[1]:void 0;return[].concat(Be(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]),["autocomplete-internal"],Be(null!==(e=t.algoliaInsightsPlugin)&&void 0!==e&&e.__automaticInsights?["autocomplete-automatic"]:[]))}function Ye(e){return Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ye(e)}function Ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Xe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Ye(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Ye(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ye(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Je(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n 0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:st(),plugins:o,initialState:bt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(ft(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:xe,onResolve:xe};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=ct(ct({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return et(e)})).then((function(e){return e.map((function(e){return bt(bt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:bt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function vt(e){return vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vt(e)}function _t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wt(e){for(var t=1;t e.length)&&(t=e.length);for(var n=0,r=new Array(t);n =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Vt,Qt,Wt,qt=null,Gt=(Vt=-1,Qt=-1,Wt=void 0,function(e){var t=++Vt;return Promise.resolve(e).then((function(e){return Wt&&t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var rn=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function on(e){return on="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},on(e)}var an=["props","refresh","store"],sn=["inputElement","formElement","panelElement"],ln=["inputElement"],cn=["inputElement","maxLength"],un=["source"],dn=["item","source"];function pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t =0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r =0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function bn(e){var t=e.props,n=e.refresh,r=e.store,o=mn(e,an);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return fn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},mn(e,sn))},getRootProps:function(e){return fn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return Yt(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":Yt(t.id,"label")},e)},getFormProps:function(e){e.inputElement;return fn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(fn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(fn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},mn(e,ln))},getLabelProps:function(e){return fn({htmlFor:Yt(t.id,"input"),id:Yt(t.id,"label")},e)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Kt(fn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var s=e||{},l=(s.inputElement,s.maxLength),c=void 0===l?512:l,u=mn(s,cn),d=Ft(r.getState()),p=function(e){return Boolean(e&&e.match(rn))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),f=t.enterKeyHint||(null!=d&&d.itemUrl&&!p?"go":"search");return fn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?Yt(t.id,"item-".concat(r.getState().activeItemId),null==d?void 0:d.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return Yt(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":Yt(t.id,"label"),value:r.getState().completion||r.getState().query,id:Yt(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:f,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){Kt(fn({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=nn(e,Xt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=Ft(o.getState()),t=n.environment.document.getElementById(Yt(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},s=function(){var e=Ft(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(en({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Kt(en({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)})):(o.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=Ft(o.getState()),c=l.item,u=l.itemInputValue,d=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:c,state:o.getState()});Kt(en({event:t,nextState:{isOpen:!1},props:n,query:u,refresh:r,store:o},a)).then((function(){p.onSelect(en({event:t,item:c,itemInputValue:u,itemUrl:d,refresh:r,source:p,state:o.getState()},a))}))}}}(fn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:xe,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},u)},getPanelProps:function(e){return fn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=mn(n,un);return fn({role:"listbox","aria-labelledby":Yt(t.id,"label"),id:Yt(t.id,"list",r)},o)},getItemProps:function(e){var a=e.item,i=e.source,s=mn(e,dn);return fn({id:Yt(t.id,"item-".concat(a.__autocomplete_id),i),role:"option","aria-selected":r.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",a.__autocomplete_id);var t=Ft(r.getState());if(null!==r.getState().activeItemId&&t){var i=t.item,s=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(fn({event:e,item:i,itemInputValue:s,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var s=i.getItemInputValue({item:a,state:r.getState()}),l=i.getItemUrl({item:a,state:r.getState()});(l?Promise.resolve():Kt(fn({event:e,nextState:{isOpen:!1},props:t,query:s,refresh:n,store:r},o))).then((function(){i.onSelect(fn({event:e,item:a,itemInputValue:s,itemUrl:l,refresh:n,source:i,state:r.getState()},o))}))}},s)}}}var hn="1.12.2",yn=[{segment:"autocomplete-core",version:hn}];function vn(e){return vn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vn(e)}function _n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wn(e){for(var t=1;t =n?null===r?null:0:o}function On(e){return On="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},On(e)}function jn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pn(e){for(var t=1;t